JAVA实现基于ZXing的二维码自动生成与图片合成

近日做项目需要生成带有信息的二维码,并嵌入到一张图片中。实现思路采用Zxing生成二维码,java图形库进行图片的嵌入。

生成二维码

ZXing是一种开放源代码的多格式1D / 2D条形码图像处理库,采用Java实现,具有其他语言的端口。需用mavan下载对应jar包,Android添加gradle依赖,或者添加jar包。

代码如下:

     private static BufferedImage createImage(String content, String logoImgPath, boolean needCompress) throws WriterException, IOException {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);}}// 没有logoif (logoImgPath == null || "".equals(logoImgPath)) {return image;}// 插入图片logoInsertIntoImage(image, logoImgPath, needCompress);return image;}
private static void insertImage(BufferedImage source, String logoImgPath, boolean needCompress) throws IOException {File file = new File(logoImgPath);if (!file.exists()) {return;}Image src = ImageIO.read(new File(logoImgPath));int width = src.getWidth(null);int height = src.getHeight(null);//处理logoif (needCompress) {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 gMaker = tag.getGraphics();gMaker.drawImage(image, 0, 0, null); // 绘制缩小后的图gMaker.dispose();src = image;}// 在中心位置插入logoGraphics2D 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

将二维码嵌入图片

生成二维码后,需要将二维码嵌入另一张图片中,实现比较简单,只需要在背景图片上画上已经生成的二维码即可 代码如下:

    public static InputStream changeMerchantSeatQrcodeImage(BufferedImage zxingImage, String backgroundPath) {InputStream imagein = null;ImageOutputStream imOut = null;try {imagein = new FileInputStream(backgroundPath);BufferedImage image = ImageIO.read(imagein);BufferedImage image2 = zxingImage;Graphics g = image.getGraphics();// 生成的二维码设置的较小,这里等比放大了二维码。也可在zxing中设置二维码生成的大小BufferedImage squreImage = resizeImage(image2, 2);g.drawImage(squreImage, 40, 25,squreImage.getWidth(), squreImage.getHeight(), null);ByteArrayOutputStream bs = new ByteArrayOutputStream();imOut = ImageIO.createImageOutputStream(bs);ImageIO.write(image, "jpg", imOut);InputStream is = new ByteArrayInputStream(bs.toByteArray());return is;} catch (Exception e) {e.printStackTrace();} finally {try {imagein.close();imOut.close();} catch (IOException e) {e.printStackTrace();}}return null;}

放大图片方法:

    public static BufferedImage resizeImage(BufferedImage  originalImage, double times){int width = (int)(originalImage.getWidth()*times);int height = (int)(originalImage.getHeight()*times);int tType = originalImage.getType();if(0 == tType){tType = 5;}BufferedImage newImage = new BufferedImage(width,height, tType);Graphics g = newImage.getGraphics();g.drawImage(originalImage, 0,0,width,height,null);g.dispose();return newImage;}

至此成功获得输入流,写入本地即可。此方法可用于批量生成管理的二维码。你可以查看www.zhaochengquan.com获取更多内容。

JAVA实现基于ZXing的二维码自动生成与图片合成相关推荐

  1. 基于zxing的二维码扫描

    前言 现在的应用中二维码扫描已经成为一个应用必不可少的功能,现在大部分Android二维码扫描都是基于zxing和Zbar,这文章就来介绍一下基于zxing的二维码扫描.先看下效果图 虽然现在的关于二 ...

  2. 基于zxing的二维码扫描(软件界面)

    原文地址:https://www.jianshu.com/p/ee2ee7677831 前言 现在的应用中二维码扫描已经成为一个应用必不可少的功能,现在大部分Android二维码扫描都是基于zxing ...

  3. java利用core 工具实现二维码的生成与解析

    java利用core 工具实现二维码的生成与解析 简单介绍下二维码:二维码其实就是一种编码技术,只是这种编码技术是用在图片上了,将给定的一些文字,数字转换为一张经过特定编码的图片,而解析二维码则相反, ...

  4. Android之ZXing扫描二维码以及生成二维码

    Android之ZXing扫描二维码以及生成二维码 ZXIng项目地址:ZXing地址 项目结构 扫描二维码:使用 CaptureActivity类 项目代码: import android.cont ...

  5. php生成二维码并与背景图片合成

    1. 下载 phpqrcode  PHP QR Code是一个PHP二维码生成类库,利用它可以轻松生成二维码,官网提供了下载和多个演示demo,查看地址:http://phpqrcode.source ...

  6. 修正Android基于ZXing的二维码扫描——横竖屏自由切换

    概述: 此博客是基于开源的框架ZXing.ZXing用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口.ZXing可以实现使用手机的内置的摄像头完成条形码的扫描及解码.该 ...

  7. 基于Zxing的二维码生成和二维码扫描

    最近又在倒腾二维码,发现网上的教程都不够用,所以把之前整合的二维码Demo有拿出来重新添加些功能,这里也算是重新学习吧! 当然对于二维码,相信大家都很熟悉了.这里就不多说.本项目是基于Zxing的开源 ...

  8. Android 基于Zxing的二维码扫描优化

    最近公司项目App中要集成二维码扫描来适应在户外工作的时候,对码头集装箱等上面贴的A4纸张打印的二维码进行识别, 一般App二维码集成后,能扫出来就不管了,但是我们在集成成功后,根据用户反馈,在户外的 ...

  9. 基于ZXing的二维码,你可以这样改造它

    概述: 如果你下载了ZXing的源码和ZXing的core.jar包,那么你现在就可以进行如下的一系列修改来自定义你的二维码扫描了. 本文链接:http://blog.csdn.net/lemon_t ...

最新文章

  1. Unity2D游戏开发和C#编程大师班
  2. AI制药来了!新药研发或告别“十年磨一剑”
  3. STM32单片机SIM800C创客GSM短信GPRS可编程模块SDK二次开发DIY
  4. Coroutine in Java - Quasar Fiber实现--转载
  5. Python 面向对象1-面向对象介绍
  6. MySQL Router实现MySQL的读写分离
  7. webform 简单的服务器控件。
  8. 湖南计算机专业专科排名2015,湖南最好的公办专科大学有哪些排名揭秘?湖南十大专科学校推荐?...
  9. C语言libcurl:RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议
  10. 在vscode中使用ajax,vscode中的ajax片段,
  11. Android中常用适配器理解及使用
  12. numpy实现BN层
  13. html数据透视,高级Excel – 数据透视表工具
  14. 测试员一份工作坚持多久跳槽,才能完美提升薪资?
  15. 怎么把多个excel表格合成一个_「Excel」合并多个表格,可以快速搞定啦
  16. 西门子840d高级编程手册_斯沃系统手册--西门子高级编程手册_840D_810Di_810D_FM_NC高级篇.pdf...
  17. CAD标注的偏移尺寸和实际尺寸不同该如何解决?
  18. 如何通过企业微信、飞书、钉钉消息通知接收双因子认证动态密码?
  19. notepad++的下载及安装HEX-Editor插件
  20. Blender接下来都会开发什么功能?2021开发开发规划公布

热门文章

  1. canvas动画气球
  2. MATLAB算法实战应用案例精讲-【神经网络】激活函数:Swish(附python代码实现)
  3. 红帽和华为,考哪个认证更好
  4. 论文管理系统项目创建及登录
  5. c语言库函数strtoul
  6. 前端excle表格插件xlsx(1) 将html页面数据写入一个excle文件
  7. Mac电脑的vm虚拟机ubuntu桌面分辨率不固定,来回变动,字体模糊不清
  8. 俩个相同大小升序序列合并在一起的中位数解法
  9. 创维广电服务器无线,创维电视无线网络怎么设置
  10. 0019__AveIconifier绿色版2.0_PNG转ICO下载