Java制作带logo的二维码图片

简单地说二维码是一个编码和解码的过程,他将你想要保存的信息,保存为一个矩阵。类似于一个二维数组,而这个数组中保存的都是boolean类型的数据,也就能用我们熟悉的0和1来理解。而我们也就使用0、1来画出这一副图像。

1、添加Maven

<!--二维码的依赖-->
<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.0</version>
</dependency>
<dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.3.0</version>
</dependency>

2、我们先根据自己想要的内容,制作一个矩阵。

    //二维码的宽度public static Integer QRCODE_WIDTH=300;//二维码的高度public static Integer QRCODE_HEIGHT=300;//二维码的边距public static Integer QRCODE_MARGIN=1;/*** description: 根据传入的内容,生成一个矩阵并返回* time: 2020/3/26日19:21* params: [content]* returns: com.google.zxing.common.BitMatrix*/public static BitMatrix encode(String content){//1、先创建一个HashMap,用来存储一些键值对,而这些键值对,保存的都是我们创建二维码时需要用的部分自定义参数HashMap<EncodeHintType,Object> hashMap=new HashMap<>(3);//二维码的容错率。建议用这个hashMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);//二维码的编码类型。建议用这个hashMap.put(EncodeHintType.CHARACTER_SET, "UTF-8");//二维码边距,也就是留白的长度。这个你可以自定义hashMap.put(EncodeHintType.MARGIN, QRCODE_MARGIN);BitMatrix bitMatrix = null;try {//2、这里就生成了我们的boolean矩阵,也就是我们说的类似的二维数组。// 按照参数顺序下来,分别是需要保存的内容,你要制造二维码还是条形码但是因为我们做二维码,所以用这个,宽,高,自定义参数bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRCODE_WIDTH, QRCODE_HEIGHT, hashMap);} catch (WriterException e) {e.printStackTrace();}return bitMatrix;}

3、根据这个返回的矩阵,我们制作一副图片。false画白色,true画黑色。

    //矩阵中正确的颜色public static Integer TRUE_COLOR=0xFF000000;//矩阵钟错误的颜色public static Integer FALSE_COLOR=0xFFFFFFFF;/*** description: 根据传入的矩阵,生成对应的二维码图片* time: 2020/3/26日19:23* params: [bitMatrix]* returns: java.awt.image.BufferedImage*/public static BufferedImage BitMatrixToBuffered(BitMatrix bitMatrix) {//1、通过宽高来创建一个背景黑色的BufferedImage对象,待会只要改变颜色就行了BufferedImage bufferedImage=new BufferedImage(QRCODE_WIDTH,QRCODE_HEIGHT,BufferedImage.TYPE_INT_RGB);//2、循环这个矩阵,宽高就是我们设定好的那个for(int h=0;h<QRCODE_WIDTH;h++){for(int w=0;w<QRCODE_HEIGHT;w++){//3、给每个位置上色,通过三元表达式来判断他是否是正确的,false的就是白色,true是黑色// 因为他生成矩阵的机制导致颜色反一下的话,真的丑!!!!所以建议就这种色号bufferedImage.setRGB(h,w,bitMatrix.get(h,w)? TRUE_COLOR:FALSE_COLOR);}}return bufferedImage;}

4、读取我们的logo图片,并且判断是否需要缩小,因为我们的logo大小是未知的。返回符合我们尺寸的BufferedImage

 //logo的宽度public static Integer LOGO_WIDTH=60;//logo的高度public static Integer LOGO_HEIGHT=60;/*** description: 根据logo文件路径,生成缩小版logo* time: 2020/3/26日19:24* params: [sourceFilePath]* returns: java.awt.image.BufferedImage*/public static Image reduceSourceImage(String sourceFilePath){//1、先读取源文件File sourceFile = new File(sourceFilePath);Image source=null;try {//2、将源文件转化为Imagesource=ImageIO.read(sourceFile);} catch (IOException e) {e.printStackTrace();}//3、获取logo的宽高,如果不符合,那么就缩小这个logoif(source.getWidth(null)>LOGO_WIDTH||source.getHeight(null)>LOGO_HEIGHT){source=source.getScaledInstance(LOGO_WIDTH,LOGO_HEIGHT,Image.SCALE_SMOOTH);}return source;}

5、将生成的缩小图,插入到二维码之间,并且保存下来。

 /*** description: 将传入的Image转化为BufferedImage然后插到中心位置就ok了* time: 2020/3/26日19:33* params: [bufferedImage,image,targetName]* returns: void*//*** description: 将传入的Image转化为BufferedImage然后插到中心位置就ok了* time: 2020/3/26日19:33* params: [bufferedImage,image,targetFileName]* returns: void*/public static void insertImageToQrCode(BufferedImage bufferedImage,Image image,String targetFileName){//1、获取二维码图片的画笔。Graphics graphics=bufferedImage.getGraphics();//2、将缩小图画到二维码的中心位置,想不通的可以看我下面画的图。graphics.drawImage(image,(QRCODE_WIDTH-LOGO_WIDTH)/2,(QRCODE_HEIGHT-LOGO_HEIGHT)/2,LOGO_WIDTH,LOGO_HEIGHT,null);//3、释放资源graphics.dispose();try {//4、分割字符串,获得文件名,这里要注意,使用.分割的时候,必须要使用\\转义String[] str=targetFileName.split("\\.");//5、将最终的图片保存下来ImageIO.write(bufferedImage,str[str.length-1],new File(targetFileName));} catch (IOException e) {e.printStackTrace();}}

6、制作一个最终方法,用来执行几步

    /*** description: 合并执行,最终只要执行这个方法就可以成功实现* time: 2020/3/26日20:05* params: [content, sourceFileName, targetFileName]* returns: void*/public static void QrCode(String content,String sourceFileName,String targetFileName){BitMatrix bitMatrix = Util.encode(content);BufferedImage bufferedImage=Util.BitMatrixToBuffered(bitMatrix);Image image=Util.reduceSourceImage(sourceFileName);Util.insertImageToQrCode(bufferedImage,image,targetFileName);}

7、解码步骤,这个可看可不看,不是很重要,一般用不太到

    /*** description: 根据传入的文件路径,来获取解码以后的结果* time: 2020/3/26日20:27* params: [fileName]* returns: java.lang.String*/public static String decode(String filePath)  {BufferedImage image= null;try {//1、先获取文件的BufferedImageimage = ImageIO.read(new File(filePath));} catch (IOException e) {e.printStackTrace();}//2、将其转化为BitmapBufferedImageLuminanceSource source = new BufferedImageLuminanceSource(image);BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));//3、往HashMap里面存解码需要用到的自定义参数HashMap<DecodeHintType,Object> hashMap=new HashMap<>(1);hashMap.put(DecodeHintType.CHARACTER_SET, "UTF-8");Result result = null;try {//4、获取到我们的结果集result = new MultiFormatReader().decode(bitmap, hashMap);} catch (NotFoundException e) {e.printStackTrace();}//5、返回我们最终的解码结果String resultStr = result.getText();return resultStr;}

8、执行结果

    package com.xjj;/*** @Author 徐敬杰* @Date 2020/3/26 16:10*/public class csdn {public static void main(String[] args) {Util.QrCode("我要保存可达鸭的图片","C:/Users/徐敬杰/Desktop/可达鸭.jpg","C:/Users/徐敬杰/Desktop/可达鸭的二维码.jpg");System.out.println(Util.decode("C:/Users/徐敬杰/Desktop/可达鸭的二维码.jpg"));}}

Java制作带logo的二维码图片相关推荐

  1. 使用zxing生成带logo的二维码图片,自动调节logo图片相对二维码图片的大小

    使用zxing生成带logo的二维码图片,自动调节logo图片相对二维码图片的大小  * 可选是否带logo,可选是否保存二维码图片:结果返回base64编码的图片数据字符串  * 页面显示:< ...

  2. python——生成带logo的二维码图片并且保存、控制打印机打印图片二维码、整合打印(获取输入框的值)、打包成exe文件

    1.生成带logo的二维码图片并且保存 前提条件:在D盘里有logo.png的图片,生成的二维码图片在D盘里的111.png import qrcode from PIL import Image# ...

  3. java制作带有logo的二维码,解决zxing中文乱码

    目标 使用谷歌zxing生成带有logo二维码 便捷地解决二维码中文乱码问题 过程 下载依赖: maven坐标: <dependency><groupId>com.google ...

  4. JAVA使用barcode4j生成条形码和二维码图片以及带logo的二维码,验证码图片

    二维码 1.Maven引入barcode4j依赖 <!-- 条形码生成 --><dependency><groupId>net.sf.barcode4j</g ...

  5. Java生成中间logo的二维码(还可以加上二维码名称哦)

    最近有负责微信开发,对于微信开发的项目,肯定少不了二维码啦,正好有个这样的需求,这对不同的商品生成一个二维码,扫码即刻下单.博主就弄了一个二维码生成的工具类. 弄出来之后,产品经理又说了,中间放上公司 ...

  6. Golang使用qrcode生成二维码,以及生成带logo的二维码

    添加并引用依赖 go get github.com/boombuler/barcodeimport ("github.com/skip2/go-qrcode" ) 1.生成字节形式 ...

  7. 动态生成带logo的二维码

    二维码的生成,需要通过GOOGLE提供的ZXING来完成,而水印图片的合成则通过JDK自带的com.sum.image.code.*包来完成 首选,通过http://www.baidu.com搜索zx ...

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

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

  9. zxing生成带logo的二维码

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

  10. Android Studio 生成二维码、生成带logo的二维码

    1.生成二维码: 2.生成logo的二维码: 一.引入依赖 首先在libs文件目录下放进jar包zxing.jar,要下载zxing.jar就点击链接:下载zxing.jar(记得点击"Cd ...

最新文章

  1. Java--缓存热点数据,最近最少使用算法
  2. 十五、“一路风光无限好,鸣嘤处处贺新婚。”(2021.5.3)
  3. 开发板的I/O在哪里——韦东山嵌入式Linux视频学习笔记01
  4. linux6.5虛擬機镜像,CentOS 7.2 自动安装光盘实验全过程记录
  5. 2019年美国大学生数学建模竞赛(MCM/ICM) E题解题思路
  6. 从前世今生聊一聊,大厂为啥亲睐时序数据库
  7. 2017.10.23 硬币购物 失败总结
  8. 一直误解的memset函数
  9. 东北大学c语言编程尸体,东北大学c语言编程试题及其答案
  10. 大数据Python学习大纲
  11. git学习-pull命令
  12. 干货 | Github标星近3w,热榜第一,如何用Python实现所有算法和一些神经网络模型...
  13. 观点丨企业云管平台(CMP)项目成功的关键因素
  14. Java到底能做什么事情呢?
  15. 高斯消元求解四种方程组
  16. 写给学生看的系统分析与验证笔记(一)——形式化基础
  17. 计算机无法进bios,del和F2进不了bios,详细教您电脑进不了bios怎么办
  18. [ASP.NET] 结合Web API在OWIN下实现OAuth
  19. Python通过xlwings自动化Excel-持续更新
  20. 宇视NVR录像机下载录像没有声音如何解决

热门文章

  1. Shamir秘密共享的同态性质
  2. 2019年2月24日训练总结
  3. 多用组合少用继承的设计思想
  4. 在安装vCenter Server第二阶段的时候出现报错 “无法运行 vdcpromo”
  5. selenium谷歌翻译并将翻译内容写入word
  6. 论文阅读《Modeling Semantic Compositionality with Sememe Knowledge》
  7. php中array_flip,php中的array_flip函数怎么用
  8. 一句话概括对闭包的理解
  9. 用手机控制Arduino上的LED灯 -- AT指令
  10. jenkins 下使用 HTML Publisher 插件后查看 html不显示内容