最近研究了Zxing的源码,以及它的一些常用的用法,感触也是很深,也提高了不少,网上也找了各种写法,要真正的理解这一整套东西还是要花费些经历的,涉及的知识面还是有一些的,下面就上一下我简单封装的源码。以方便大家做参考,封装的不完善,只是简单的写了个,大家可以自己进行封装.....
1. 下载Zxing所需要的依赖包:core-2.2.jar、javase-2.2.jar ,因为只使用到了javase-2.2 Jar包的部分内容,可以将javase进行简化下
ZxingDemoTest.java: 测试入口类
public static void main(String[] args) { try { int width = 200; int height = 200; String content = "http://www.taobao.com"; BitMatrix matrix = MatrixToImageWriterEx.createQRCode(content, width, height); MatrixToLogoImageConfig logoConfig = new MatrixToLogoImageConfig(Color.BLUE, 4); MatrixToImageWriterEx.writeToFile(matrix, "jpg", "C:/img/imgQRCode.jpg", "C:/img/logo.jpg", logoConfig); System.out.println("生成二维码结束!"); } catch (Exception e) { e.printStackTrace(); } }
MatrixToImageWriterEx.java : 生成二维码logo扩展类,此类是在zxing的基础上进行扩展的,用于在二维码上定制自己的logo
package com.demo.zxing; import java.awt.BasicStroke; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Hashtable; import javax.imageio.ImageIO; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.client.j2se.MatrixToImageConfig; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; public class MatrixToImageWriterEx { private static final MatrixToLogoImageConfig DEFAULT_CONFIG = new MatrixToLogoImageConfig(); /** * 根据内容生成二维码数据 * @param content 二维码文字内容[为了信息安全性,一般都要先进行数据加密] * @param width 二维码照片宽度 * @param height 二维码照片高度 * @return */ public static BitMatrix createQRCode(String content, int width, int height){ Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>(); //设置字符编码 hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 指定纠错等级 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); BitMatrix matrix = null; try { matrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); } catch (WriterException e) { e.printStackTrace(); } return matrix; } /** * 写入二维码、以及将照片logo写入二维码中 * @param matrix 要写入的二维码 * @param format 二维码照片格式 * @param imagePath 二维码照片保存路径 * @param logoPath logo路径 * @throws IOException */ public static void writeToFile(BitMatrix matrix, String format, String imagePath, String logoPath) throws IOException { MatrixToImageWriter.writeToFile(matrix, format, new File(imagePath), new MatrixToImageConfig()); //添加logo图片, 此处一定需要重新进行读取,而不能直接使用二维码的BufferedImage 对象 BufferedImage img = ImageIO.read(new File(imagePath)); MatrixToImageWriterEx.overlapImage(img, format, imagePath, logoPath, DEFAULT_CONFIG); } /** * 写入二维码、以及将照片logo写入二维码中 * @param matrix 要写入的二维码 * @param format 二维码照片格式 * @param imagePath 二维码照片保存路径 * @param logoPath logo路径 * @param logoConfig logo配置对象 * @throws IOException */ public static void writeToFile(BitMatrix matrix, String format, String imagePath, String logoPath, MatrixToLogoImageConfig logoConfig) throws IOException { MatrixToImageWriter.writeToFile(matrix, format, new File(imagePath), new MatrixToImageConfig()); //添加logo图片, 此处一定需要重新进行读取,而不能直接使用二维码的BufferedImage 对象 BufferedImage img = ImageIO.read(new File(imagePath)); MatrixToImageWriterEx.overlapImage(img, format, imagePath, logoPath, logoConfig); } /** * 将照片logo添加到二维码中间 * @param image 生成的二维码照片对象 * @param imagePath 照片保存路径 * @param logoPath logo照片路径 * @param formate 照片格式 */ public static void overlapImage(BufferedImage image, String formate, String imagePath, String logoPath, MatrixToLogoImageConfig logoConfig) { try { BufferedImage logo = ImageIO.read(new File(logoPath)); Graphics2D g = image.createGraphics(); //考虑到logo照片贴到二维码中,建议大小不要超过二维码的1/5; int width = image.getWidth() / logoConfig.getLogoPart(); int height = image.getHeight() / logoConfig.getLogoPart(); //logo起始位置,此目的是为logo居中显示 int x = (image.getWidth() - width) / 2; int y = (image.getHeight() - height) / 2; //绘制图 g.drawImage(logo, x, y, width, height, null); //给logo画边框 //构造一个具有指定线条宽度以及 cap 和 join 风格的默认值的实心 BasicStroke g.setStroke(new BasicStroke(logoConfig.getBorder())); g.setColor(logoConfig.getBorderColor()); g.drawRect(x, y, width, height); g.dispose(); //写入logo照片到二维码 ImageIO.write(image, formate, new File(imagePath)); } catch (Exception e) { e.printStackTrace(); } } }
MatrixToLogoImageConfig.java : 定制logo属性类
package com.demo.zxing; import java.awt.Color; public class MatrixToLogoImageConfig { //logo默认边框颜色 public static final Color DEFAULT_BORDERCOLOR = Color.RED; //logo默认边框宽度 public static final int DEFAULT_BORDER = 2; //logo大小默认为照片的1/5 public static final int DEFAULT_LOGOPART = 5; private final int border = DEFAULT_BORDER; private final Color borderColor; private final int logoPart; /** * Creates a default config with on color {@link #BLACK} and off color * {@link #WHITE}, generating normal black-on-white barcodes. */ public MatrixToLogoImageConfig() { this(DEFAULT_BORDERCOLOR, DEFAULT_LOGOPART); } public MatrixToLogoImageConfig(Color borderColor, int logoPart) { this.borderColor = borderColor; this.logoPart = logoPart; } public Color getBorderColor() { return borderColor; } public int getBorder() { return border; } public int getLogoPart() { return logoPart; } }
这基本就是源码了,这里就不贴项目源码了,中国的程序员拿来主义太严重.... 其实还有一些其他的扩展功能.... 这里就不多说了。
相关推荐
zxing生成二维码,带logo的二维码,图片Base64编码。qrcode生成二维码。
spring boot用zxing生成二维码,支持logo
该工具类目前比较简单,只是实现了普通二维码、logo二维码、彩色二维码和二维码条形码解析几个功能。 根据此工具类可扩展生成LOGO+文字的二维码,暂时不需要没有封装。
ZXing是谷歌的一个开源库,可以用来生成二维码、扫描二维码。本文所介绍的是第一部分。 首先上效果图: ZXing相关各种文件官方下载地址:https://github.com/zxing/zxing/releases 或者在这里下载(只有本项目所用...
完美使用zxing生成二维码,可带logo,可解码,不仅如此,其中QRcode.java还可以用于生成二维码名片
工具包含单独生成二维码,向二维码图片增加logo。解析二维码
主要是使用google的zxing 生成二维码,可设置logo、二维码前景色/后景色、白边大小、二维码大小 详情:http://blog.csdn.net/rongku/article/details/51872156
JAVA生成Zxing二维码、读取二维码内容信息、利用二维码生成手机名片、生成带LOGO的二维码名片。附有效果图
Android:使用ZXing生成二维码(支持添加Logo图案)-附件资源
ZXing生成可选logo和文字的二维码图片工具类ZXingCodeUtils,可选是否带logo图片,可选是否生成二维码图片到指定路径下,采用zxing-core-3.1.0
使用google开源zxing工具自己整理的二维码和条形码成功和解析代码, 新增加了生成带logo小图片的彩色二维码例子。 附加图片: 把img下面的图片放到c盘下做测试用
java 使用zxing生成二维码(带logo和文字说明)已经封装 使用起来很方便 下载下来直接调用传入参数就可以
亲测可用的二维码生成插件。能够快速有效的生成各种二维码,包括带LOGO。
使用ZXing生成二维码,抄别人的自己实现的
ZXing dll二维码工具类库,支持中文,logo, 容错率,解码等功能。完美的二维码工具类库。值得下载
一个在 .NET Framework 环境下实现的二维码生成与识别的小程序。 本人综合比较了已有的第三方库,最终选择了 ZXing.Net 。ZXing.Net 是开源项目 https://github.com/zxing/zxing 在 .NET 平台上的实现;虽然 NuGet ...
现在二维码很流行,大街小巷大小商品广告上的二维码标签都随处可见,而且...网上比较少介绍基于windows下的C++二维码编码信息,最近正好在windows平台下使用QT开发了一个简单的生成带LOGO的二维码小程序,特记录一下。
看着网上好看的二维码,也想着自己实现一个,经过3周的理论加开发时间,终于实现,详细介绍请看 https://blog.csdn.net/u011837804/article/details/129229973,本源码基于zxing组件扩展实现了草料二维码99%的功能。...
用ZXing 来识别二维码,生成二维码,生成带logo 的二维码