ZXing的使用

  • 准备工作
  • 一、生成普通二维码
    • 1.1生成普通二维码
    • 1.2低版本包二维码去除白边
  • 二、生成logo二维码
  • 三、生成条形码
  • 测试

准备工作

1.需要依赖zxing的jar包 jar下载,或者maven依赖

<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version>
</dependency>
<dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.3.3</version>
</dependency>

2.zXing是开源项目,地址:github
3.通用方法,这个方法是生成普通二维码,并且背景是黑白色

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;import java.awt.image.BufferedImage;
/***创建背景色为黑白色的二维码* @param url 二维码内容* @param charset 二维码内容字符集* @param hint  二维码参数设定* @param width 二维码宽度* @param height 二维码高度* @return* @author h*/
public static BufferedImage createQRCode(String url, String charset, Map<EncodeHintType, ?> hint, int width,int height) {BitMatrix matrix;try {matrix = new MultiFormatWriter().encode(new String(url.getBytes(charset), charset), BarcodeFormat.QR_CODE,width, height, hint);return toBufferedImage(matrix);} catch (WriterException e) {throw new RuntimeException(e.getMessage(), e);} catch (Exception e) {throw new RuntimeException(e.getMessage(), e);}
}/*** toBufferedImage*修改图片背景色* @param matrix* @return*/
public static BufferedImage toBufferedImage(BitMatrix matrix) {int width = matrix.getWidth();int height = matrix.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, matrix.get(x, y) ? BLACK : WHITE);}}return image;
}

一、生成普通二维码

1.1生成普通二维码

 /***创建普通二维码,字符为utf-8* @param url* @return* @author h*/
public static BufferedImage createQRCode(String url) {//二维码配置Map hint = new HashMap();hint.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);//容错级别,共4级,详细百度hint.put(EncodeHintType.CHARACTER_SET, QRCODE_CHARSET);//字符集hint.put(EncodeHintType.MARGIN, 2);//二维码外边距return createQRCode(url, QRCODE_CHARSET, hint, QRCODE_WIDTH, QRCODE_HEIGHT);
}

1.2低版本包二维码去除白边

这里使用3.3,使用键值对EncodeHintType.MARGIN值为0时即可去除白边

/**
* 删除白边,低版本使用*/
private static BitMatrix deleteWhite(BitMatrix matrix) {int[] rec = matrix.getEnclosingRectangle();int resWidth = rec[2] + 1;int resHeight = rec[3] + 1;BitMatrix resMatrix = new BitMatrix(resWidth, resHeight);resMatrix.clear();for (int i = 0; i < resWidth; i++) {for (int j = 0; j < resHeight; j++) {if (matrix.get(i + rec[0], j + rec[1]))resMatrix.set(i, j);}}return resMatrix;
}

二、生成logo二维码

/**
* Create qrcode with default settings and logo*中间带logo的二维码* @param data 二维码内容* @param logoFile logo图片路径* @return* @author h*/
@SuppressWarnings("unchecked")
public static BufferedImage createQRCodeWithLogo(String data, File logoFile) {Map hint = new HashMap();hint.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);//容错级别,共4级,详细百度hint.put(EncodeHintType.CHARACTER_SET, QRCODE_CHARSET);//字符集编码hint.put(EncodeHintType.MARGIN, 0);//二维码外边距return createQRCodeWithLogo(data, QRCODE_CHARSET, hint, QRCODE_WIDTH, QRCODE_HEIGHT, logoFile);
}/**
* Create qrcode with specified hint and logo** @param url 二维码内容* @param charset 字符集 默认UTF-8* @param hint 二维码配置* @param width 宽* @param height 高* @param logoFile logo文件* @return* @author h*/public static BufferedImage createQRCodeWithLogo(String url, String charset, Map<EncodeHintType, ?> hint,int width, int height, File logoFile) {try {BufferedImage qrcode = createQRCode(url, charset, hint, width, height);BufferedImage logo = ImageIO.read(logoFile);BufferedImage combined = new BufferedImage(height, width, BufferedImage.TYPE_INT_ARGB);Graphics2D g = (Graphics2D) combined.getGraphics();//设置二维码大小,太大,会覆盖二维码,此处20%int logoWidth = logo.getWidth() > qrcode.getWidth() * 2 / 10 ? (qrcode.getWidth() * 2 / 10) : logo.getWidth();int logoHeight = logo.getHeight() > qrcode.getHeight() * 2 / 10 ? (qrcode.getHeight() * 2 / 10) : logo.getHeight();//设置logo图片放置位置--中心int x = Math.round((qrcode.getWidth() - logoWidth) / 2);int y = Math.round((qrcode.getHeight() - logoHeight) / 2);g.drawImage(qrcode, 0, 0, null);g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f));//开始合并绘制图片g.drawImage(logo, x, y, logoWidth, logoHeight, null);g.drawRoundRect(x, y, logoWidth, logoHeight, 15, 15);//logo边框大小g.setStroke(new BasicStroke(3));//logo边框颜色g.setColor(Color.white);g.drawRoundRect(x, y, logoWidth, logoHeight, 15, 15);g.dispose();logo.flush();qrcode.flush();return combined;} catch (IOException e) {throw new RuntimeException(e.getMessage(), e);} catch (Exception e) {throw new RuntimeException(e.getMessage(), e);}}

三、生成条形码

条形码生成是有一定规则的,这里使用的是CODE_128,该条码包括大写字母、数字、常用标点符号和一些控制符。这里给个参考:
条形码使用规则

/**
* 条形码** @param contents 内容* @param width 宽* @param height 高* @param imgPath 生成后文件路径*/
public static void encode(String contents, int width, int height, String imgPath) {int codeWidth = 3 + // start guard(7 * 6) + // left bars+ // middle guard(7 * 6) + // right bars3; // end guardcodeWidth = Math.max(codeWidth, width);try {File file = new File(imgPath);BitMatrix bitMatrix = new MultiFormatWriter().encode(contents,BarcodeFormat.CODE_128, codeWidth, height, null);MatrixToImageWriter.writeToPath(bitMatrix, "png", file.toPath());} catch (Exception e) {e.printStackTrace();}
}

测试

main方法测试+图片

 //字符集public static final String QRCODE_CHARSET = "UTF-8";//高度public static final int QRCODE_HEIGHT = 300;//宽度public static final int QRCODE_WIDTH = 300;//黑private static final int BLACK = 0xFF000000;//白private static final int WHITE = 0xFFFFFFFF;public static void main(String[] args) throws IOException, NotFoundException {//生成普通二维码BufferedImage qrCode = createQRCode("https://www.baidu.com/");ImageIO.write(qrCode, "png", new File("D:/普通二维码.png"));//生成logo二维码String data = "https://www.baidu.com/";File logoFile = new File("D:/1234.png");BufferedImage image = QrTest2.createQRCodeWithLogo(data,logoFile);ImageIO.write(image, "png", new File("D:/logo二维码.png"));//生成条形码String imgPath = "D:/条码.png";String contents = "6926557300360";int width = 400, height = 100;encode(contents, width, height, imgPath);System.out.println("结束");}

去除白边的logo二维码

条码

普通二维码

ZXing生成二维码,条码,logo二维码相关推荐

  1. 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式

    GitHub项目的链接地址 目录 功能介绍 常见问题 效果图与示例 apk Gradle 依赖 布局文件 自定义属性说明 接口说明 关于我 功能介绍 ZXing 生成可自定义颜色.带 logo 的二维 ...

  2. SpringBoot 整合zxing生成或解析二维码

    生成无Logo二维码 . 有Logo二维码 和 解析二维码内容 一.导包 二.Demo 三.结果 一.导包 zxing地址:https://mvnrepository.com/artifact/com ...

  3. Zxing实现二维码生成和解析,可带logo

        在项目中使用zxing生成二维码提供项目支撑(ZXing是一个开源Java类库用于解析多种格式的条形码和二维码),其余SwetakeQRCode.BarCode4j等等工具可去了解. 简单介绍 ...

  4. ZXing生成条形码、二维码、带logo二维码

    采用的是开源的ZXing,Maven配置如下,jar包下载地址,自己选择版本下载,顺便推荐下Maven Repository <!-- https://mvnrepository.com/art ...

  5. (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

    场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老 ...

  6. zxing生成带logo的二维码

    倒Zxing依赖 implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.2.1' 代码段 import android.graphics.Bitma ...

  7. zxing 生成二维码,可设置logo、二维码颜色、白边大小

    主要是使用google的zxing 生成二维码,可设置logo.二维码前景色/后景色.白边大小.二维码大小 1.用到jar包 <dependency><groupId>com. ...

  8. zxing 二维码、带logo二维码生成

    <span style="font-size:18px;">普通二维码生成</span> <span style="font-size:18 ...

  9. 用ZXING生成二维码的工具类(可以去掉白边,添加logo)

    ===========================用ZXING生成二维码的工具类(可以去掉白边,添加logo)========================== /**  * @auther g ...

最新文章

  1. ubuntu操作系统下载
  2. iMeta:德布鲁因图在微生物组研究中的应用(全文翻译,PPT,视频)
  3. AI 时代保护儿童刻不容缓!智源研究院发布我国首个儿童人工智能发展原则《面向儿童的人工智能北京共识》...
  4. HTML5实践之歌词同步播放器
  5. oracle原始数据类型,Oracle基本数据类型存储格式浅析——RAW类型
  6. 自我总结和学习表单提交的几种方式 (一)
  7. 十年磨一剑!支付宝自研数据库OceanBase通过阿里云向全球开放
  8. 松哥整理了 15 道 Spring Boot 高频面试题,看完当面霸
  9. .NET程序的代码混淆、加壳与脱壳
  10. LeetCode 106. 从中序与后序遍历序列构造二叉树(递归)
  11. spring源码学习
  12. Android 签名
  13. 拳王虚拟项目公社:虚拟资源自动化挣钱,空手套白狼的躺赚技术
  14. 计算机在护理专业中的论文题目,护理专业论文格式(通用模板)
  15. 免费电子书籍--网址
  16. Jmeter---脚本录制
  17. 禁止MAC Chrome更新
  18. Cy5 COOH非活性染料溶于有机溶剂1032678-07-1 科研
  19. 小爱控制HA上的开关(红外线)
  20. CSDN的文章如何快速转移到微信公众号上

热门文章

  1. 量子计算机研制成功图片,光量子计算机的曙光:科学家成功研制出量子光源
  2. Fractal Streets 递归+坐标转换
  3. 通过Word或WLW离线发布CSDN博客
  4. Linux基础命令(补充:命令行提示字符加颜色)
  5. 【微信小游戏】CocosCreator做小游戏 — 字符串编码转换(UTF-8和GBK互转)
  6. 优惠券测试点和测试用例
  7. 跟任何人聊得来(2)
  8. JavaWeb项目中出现faceted project problem问题是什么原因
  9. Android字母排序列表效果与开发实现
  10. Java中将科学记数法字符串转换成数字字符串