Java实现生成可跳转指定页面的二维码

package test;  import java.awt.BasicStroke;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Shape;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.OutputStream;
import java.util.Hashtable;
import java.util.Random;  import javax.imageio.ImageIO;  import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.Result;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;  public class QRCodeUtil {  private static final String CHARSET = "utf-8";    private static final String FORMAT_NAME = "JPG";    // 二维码尺寸    private static final int QRCODE_SIZE = 300;  // LOGO宽度    private static final int WIDTH = 60;  // LOGO高度    private static final int HEIGHT = 60;  private static BufferedImage createImage(String content, String imgPath,    boolean needCompress) throws Exception {    Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();    hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);    hints.put(EncodeHintType.CHARACTER_SET, CHARSET);    hints.put(EncodeHintType.MARGIN, 1);    BitMatrix bitMatrix = new MultiFormatWriter().encode(content,    BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints);    int width = bitMatrix.getWidth();    int height = bitMatrix.getHeight();    BufferedImage image = new BufferedImage(width, height,    BufferedImage.TYPE_INT_RGB);    for (int x = 0; x < width; x++) {    for (int y = 0; y < height; y++) {    image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000    : 0xFFFFFFFF);    }    }    if (imgPath == null || "".equals(imgPath)) {    return image;    }    // 插入图片    QRCodeUtil.insertImage(image, imgPath, needCompress);    return image;    }    /**  * 插入LOGO  *   * @param source  *            二维码图片  * @param imgPath  *            LOGO图片地址  * @param needCompress  *            是否压缩  * @throws Exception  */    private static void insertImage(BufferedImage source, String imgPath,    boolean needCompress) throws Exception {    File file = new File(imgPath);    if (!file.exists()) {    System.err.println(""+imgPath+"   该文件不存在!");    return;    }    Image src = ImageIO.read(new File(imgPath));    int width = src.getWidth(null);    int height = src.getHeight(null);    if (needCompress) { // 压缩LOGO    if (width > WIDTH) {    width = WIDTH;    }    if (height > HEIGHT) {    height = HEIGHT;    }    Image image = src.getScaledInstance(width, height,    Image.SCALE_SMOOTH);    BufferedImage tag = new BufferedImage(width, height,    BufferedImage.TYPE_INT_RGB);    Graphics g = tag.getGraphics();    g.drawImage(image, 0, 0, null); // 绘制缩小后的图    g.dispose();    src = image;    }    // 插入LOGO    Graphics2D graph = source.createGraphics();    int x = (QRCODE_SIZE - width) / 2;    int y = (QRCODE_SIZE - height) / 2;    graph.drawImage(src, x, y, width, height, null);    Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6);    graph.setStroke(new BasicStroke(3f));    graph.draw(shape);    graph.dispose();    }    /**  * 生成二维码(内嵌LOGO)  *   * @param content  *            内容  * @param imgPath  *            LOGO地址  * @param destPath  *            存放目录  * @param needCompress  *            是否压缩LOGO  * @throws Exception  */    public static void encode(String content, String imgPath, String destPath,    boolean needCompress) throws Exception {    BufferedImage image = QRCodeUtil.createImage(content, imgPath,    needCompress);    mkdirs(destPath);    String file = new Random().nextInt(99999999)+".jpg";    ImageIO.write(image, FORMAT_NAME, new File(destPath+"/"+file));    }    /**  * 当文件夹不存在时,mkdirs会自动创建多层目录,区别于mkdir.(mkdir如果父目录不存在则会抛出异常)  * @author lanyuan  * Email: mmm333zzz520@163.com  * @date 2013-12-11 上午10:16:36  * @param destPath 存放目录  */    public static void mkdirs(String destPath) {    File file =new File(destPath);        //当文件夹不存在时,mkdirs会自动创建多层目录,区别于mkdir.(mkdir如果父目录不存在则会抛出异常)    if (!file.exists() && !file.isDirectory()) {    file.mkdirs();    }    }    /**  * 生成二维码(内嵌LOGO)  *   * @param content  *            内容  * @param imgPath  *            LOGO地址  * @param destPath  *            存储地址  * @throws Exception  */    public static void encode(String content, String imgPath, String destPath)    throws Exception {    QRCodeUtil.encode(content, imgPath, destPath, false);    }    /**  * 生成二维码  *   * @param content  *            内容  * @param destPath  *            存储地址  * @param needCompress  *            是否压缩LOGO  * @throws Exception  */    public static void encode(String content, String destPath,    boolean needCompress) throws Exception {    QRCodeUtil.encode(content, null, destPath, needCompress);    }    /**  * 生成二维码  *   * @param content  *            内容  * @param destPath  *            存储地址  * @throws Exception  */    public static void encode(String content, String destPath) throws Exception {    QRCodeUtil.encode(content, null, destPath, false);    }    /**  * 生成二维码(内嵌LOGO)  *   * @param content  *            内容  * @param imgPath  *            LOGO地址  * @param output  *            输出流  * @param needCompress  *            是否压缩LOGO  * @throws Exception  */    public static void encode(String content, String imgPath,    OutputStream output, boolean needCompress) throws Exception {    BufferedImage image = QRCodeUtil.createImage(content, imgPath,    needCompress);    ImageIO.write(image, FORMAT_NAME, output);    }    /**  * 生成二维码  *   * @param content  *            内容  * @param output  *            输出流  * @throws Exception  */    public static void encode(String content, OutputStream output)    throws Exception {    QRCodeUtil.encode(content, null, output, false);    }    /**  * 解析二维码  *   * @param file  *            二维码图片  * @return  * @throws Exception  */    public static String decode(File file) throws Exception {    BufferedImage image;    image = ImageIO.read(file);    if (image == null) {    return null;    }    BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(    image);    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));    Result result;    Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();    hints.put(DecodeHintType.CHARACTER_SET, CHARSET);    result = new MultiFormatReader().decode(bitmap, hints);    String resultStr = result.getText();    return resultStr;    }    /**  * 解析二维码  *   * @param path  *            二维码图片地址  * @return  * @throws Exception  */    public static String decode(String path) throws Exception {    return QRCodeUtil.decode(new File(path));    }  public static void main(String[] args) throws Exception {  String text = "http://www.iteye.com";  //这里设置自定义网站url  String logoPath = "d:\\zilv.jpg";   String destPath = "d:\\";   QRCodeUtil.encode(text, logoPath, destPath, true);    }
}

本博文为转载,转载地址:https://suko.iteye.com/blog/2244138

Java实现生成可跳转指定页面的二维码相关推荐

  1. java后台生成二维码以及页面显示二维码方式

    上篇文章已经说明并发布了后台生成二维码工具类,大家可以直接去看或者去拿. 地址:最简单实用的java生成二维码工具 现在呢说明页面上展示二维码的两种方式: 1.使用img标签的src来请求生成二维码, ...

  2. Java代码小demon(一)SpringBoot+二维码和条形码生成

    1. 简介 原由 需要一个工具类,可以将数据存储在二维码中,通过扫一扫可以获取到信息,条形码不能接受中文字符 收藏和转载以及自己应用时拓展,具体实现和底层原理还不会,有时间我会去了解或者忘记 借鉴博客 ...

  3. Java实现微信公众号直接发送参数二维码给用户

    文章目录 前言 一.参数二维码的作用 二.功能实现 1. 生成带参数二维码 2. 上传二维码图片 3. 发送带参数二维码给用户 总结 前言 公众号开发近些年是一个比较热门的方向,今天为大家讲解的是用J ...

  4. 微信公众号开发之生成并扫描带参数的二维码(无需改动)

    首先把参考的博文罗列出来: 1.微信公众号开发之生成并扫描带参数的二维码: https://blog.csdn.net/qq_23543983/article/details/80228558 2.由 ...

  5. 小程序之 保存canvas生成商品图片附加小程序二维码 分享到朋友圈

    小程序之 保存canvas生成商品图片附加小程序二维码 分享到朋友圈 一.概述 需要用到的生成二维码组件(可自行下载添加到小程序根目录utils里):https://github.com/demi52 ...

  6. 页面扫描二维码下载apk ,区分安卓,苹果

    在官网的连接上同时有二维码扫描方式与点击下载方式.. 点击下载跳转到下载页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transiti ...

  7. Python学习之生成带logo背景图的二维码(静态和动态图)

    前言 二维码简称 QR Code(Quick Response Code),学名为快速响应矩阵码,是二维条码的一种,由日本的 Denso Wave 公司于 1994 年发明.现随着智能手机的普及,已广 ...

  8. C#生成带背景和文字的二维码图片

    /// <summary>         /// 生成带背景和文字的二维码图片         /// </summary>         /// <param na ...

  9. Web收银页面、二维码收款页面源码

    目录 文章目录 目录 源码说明 项目详情 独立项目结构 前端效果展示 部分源码展示 源码说明 WEB收银台页面,付款码支付页面,为独立页面,非弹窗,如需弹窗收银,可参见:简单的扫码支付页面(源码). ...

最新文章

  1. 二进制搜索算法_使用安全摄像机镜头解释二进制搜索算法
  2. DELL服务器利用OMSA修改BIOS设置
  3. php使用redis内存不足,PHP开发:Redis 内存满了怎么办?
  4. CentOS6.9 下编译安装MySQL5.7.19
  5. Linux Socket C语言网络编程:Pthread Socket [code from GitHub, for study]
  6. 中国大陆主要银行卡号对应
  7. CAD转换高清图片该如何进行设置
  8. Android信鸽推送全解
  9. 程序 卡塔_卡塔斯码
  10. 教程 - 【超详细】从零开始部署网站——阿里云主机CentOS系统
  11. apk修改android开机画面,Android手机开机动画的修改
  12. android 左右分栏联动布局,自定义页面分栏布局
  13. 坚守普惠金融初心,微众银行持续升级无障碍金融服务
  14. 蓝色TADF分子3DPyM-pDTC,2DPyM-mDTC,2DPyM-mDBr ,3DPyM-pDBr:蓝色热激活延迟荧光材料
  15. Fabric 1.0源代码分析(22)Ledger #blkstorage(block文件存储)
  16. SQLServer阻止保存要求重新创建表的更改,sql在一列数据前统一加字符
  17. 能否在虚拟平台里构建真实的生活体验?
  18. 常用日本语1000句+简单用语
  19. 湖南省株洲市谷歌高清卫星地图下载
  20. 淘宝/天猫api数据接口,获得淘宝商品详情 API 返回值说明

热门文章

  1. Unity3D优化技巧系列一
  2. 手机应用软件下载导航php源码_腾讯地图官方版下载-腾讯地图手机导航9.1.1 最新版...
  3. Ubuntu基本操作命令
  4. 星汉未来成为 FinOps 产业标准生态联盟首批会员
  5. 宜信开源|Davinci:可视应用平台介绍与展望
  6. python小欢喜(八)俄罗斯方块 (5) 生成各种组合形状
  7. 【论文翻译】YOLOv4: Optimal Speed and Accuracy of Object Detection
  8. FCKeditor源代码分析(一)-----fckeditor.js的中文注释分析(原创)
  9. 高斯,数据科学家最爱的男人(我们不是GAY!)
  10. 股指期货交易规则概述—股指期货网