ZXing生成二维码,条码,logo二维码
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二维码相关推荐
- 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式
GitHub项目的链接地址 目录 功能介绍 常见问题 效果图与示例 apk Gradle 依赖 布局文件 自定义属性说明 接口说明 关于我 功能介绍 ZXing 生成可自定义颜色.带 logo 的二维 ...
- SpringBoot 整合zxing生成或解析二维码
生成无Logo二维码 . 有Logo二维码 和 解析二维码内容 一.导包 二.Demo 三.结果 一.导包 zxing地址:https://mvnrepository.com/artifact/com ...
- Zxing实现二维码生成和解析,可带logo
在项目中使用zxing生成二维码提供项目支撑(ZXing是一个开源Java类库用于解析多种格式的条形码和二维码),其余SwetakeQRCode.BarCode4j等等工具可去了解. 简单介绍 ...
- ZXing生成条形码、二维码、带logo二维码
采用的是开源的ZXing,Maven配置如下,jar包下载地址,自己选择版本下载,顺便推荐下Maven Repository <!-- https://mvnrepository.com/art ...
- (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果
场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老 ...
- zxing生成带logo的二维码
倒Zxing依赖 implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.2.1' 代码段 import android.graphics.Bitma ...
- zxing 生成二维码,可设置logo、二维码颜色、白边大小
主要是使用google的zxing 生成二维码,可设置logo.二维码前景色/后景色.白边大小.二维码大小 1.用到jar包 <dependency><groupId>com. ...
- zxing 二维码、带logo二维码生成
<span style="font-size:18px;">普通二维码生成</span> <span style="font-size:18 ...
- 用ZXING生成二维码的工具类(可以去掉白边,添加logo)
===========================用ZXING生成二维码的工具类(可以去掉白边,添加logo)========================== /** * @auther g ...
最新文章
- ubuntu操作系统下载
- iMeta:德布鲁因图在微生物组研究中的应用(全文翻译,PPT,视频)
- AI 时代保护儿童刻不容缓!智源研究院发布我国首个儿童人工智能发展原则《面向儿童的人工智能北京共识》...
- HTML5实践之歌词同步播放器
- oracle原始数据类型,Oracle基本数据类型存储格式浅析——RAW类型
- 自我总结和学习表单提交的几种方式 (一)
- 十年磨一剑!支付宝自研数据库OceanBase通过阿里云向全球开放
- 松哥整理了 15 道 Spring Boot 高频面试题,看完当面霸
- .NET程序的代码混淆、加壳与脱壳
- LeetCode 106. 从中序与后序遍历序列构造二叉树(递归)
- spring源码学习
- Android 签名
- 拳王虚拟项目公社:虚拟资源自动化挣钱,空手套白狼的躺赚技术
- 计算机在护理专业中的论文题目,护理专业论文格式(通用模板)
- 免费电子书籍--网址
- Jmeter---脚本录制
- 禁止MAC Chrome更新
- Cy5 COOH非活性染料溶于有机溶剂1032678-07-1 科研
- 小爱控制HA上的开关(红外线)
- CSDN的文章如何快速转移到微信公众号上