/*************编码转换类【1】***********************/package cn.gp.tools.ErWCodeUtils;import java.io.UnsupportedEncodingException;
/*** 作用:编码转换* @author 小风微灵**/
public class encodingFunction {public static String getMethodEncoding(String input){try {String result=new String(input.getBytes("iso-8859-1"),"utf-8");return result;} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();return "";}}
}

/***********************二维码图片实现类【2】************************************/package cn.gp.tools.ErWCodeUtils;
import java.awt.image.BufferedImage;import jp.sourceforge.qrcode.data.QRCodeImage;public class TwoDimensionCodeImage implements QRCodeImage {BufferedImage bufImg;public TwoDimensionCodeImage(BufferedImage bufImg) {this.bufImg = bufImg;}@Overridepublic int getHeight() {return bufImg.getHeight();}@Overridepublic int getPixel(int x, int y) {return bufImg.getRGB(x, y);}@Overridepublic int getWidth() {return bufImg.getWidth();}}

 /*******************生成带有图片二维码的类【3】************************************/  1 package cn.gp.tools.ErWCodeUtils;2 3 import java.awt.Color;4 import java.awt.Graphics2D;5 import java.awt.Image;6 import java.awt.image.BufferedImage;7 import java.io.ByteArrayInputStream;8 import java.io.File;9 import java.io.IOException;10 import java.io.InputStream;11 import java.io.UnsupportedEncodingException;12 import java.util.UUID;13 14 import javax.imageio.ImageIO;15 16 import jp.sourceforge.qrcode.QRCodeDecoder;17 import jp.sourceforge.qrcode.exception.DecodingFailedException;18 import jp.sourceforge.qrcode.geom.Point;19 import cn.gp.tools.ImageUtil;20 21 import com.swetake.util.Qrcode;22 23 public class QRCodeAction {24     25     26     27     28     /***************************成员变量-属性****************************************/29     private static int DEFAULT_WIDTH;30     private static int UNIT_WIDTH = 12;31     //输入流32     private ByteArrayInputStream inputStream;33     public ByteArrayInputStream getInputStream() {34         return inputStream;35     }36     public void setInputStream(ByteArrayInputStream inputStream) {37         this.inputStream = inputStream;38     }39     40     /***************************重写父类方法****************************************/41     42     43     /***************************方法****************************************/44     /**45      * 生成二维码(QRCode)图片的公共方法46      * @param content 存储内容47      * @param imgType 图片类型48      * @param size 二维码尺寸49      * @return50      */51     public static BufferedImage qRCodeCommon(String content, String imgType, int size) {52         53         BufferedImage bufImg = null;54         55         try {56             //二维码生成类57                 Qrcode qrcodeHandler = new Qrcode();58             // 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小59                 qrcodeHandler.setQrcodeErrorCorrect('M');60                 qrcodeHandler.setQrcodeEncodeMode('B');//AlphaNumeric(0.2),Numeric(0/1/2),Byte(中英文)61             62             // 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大63                 qrcodeHandler.setQrcodeVersion(size);64             // 获得内容的字节数组,设置编码格式65                         byte[] contentBytes = content.getBytes("utf-8");66                         boolean[][] bRect = qrcodeHandler.calQrcode(contentBytes);67                     // 图片尺寸68                          DEFAULT_WIDTH =  (int) (bRect.length * UNIT_WIDTH+8*Math.sqrt(2));69                         //图片的w,h70                         bufImg = new BufferedImage(DEFAULT_WIDTH, DEFAULT_WIDTH, 71                                                     BufferedImage.TYPE_INT_RGB);72                         73                         //画笔工具74                         Graphics2D gs = bufImg.createGraphics();75                         76                     // 设置背景颜色77                         gs.setBackground(Color.white);78                         gs.clearRect(0, 0,DEFAULT_WIDTH+10,DEFAULT_WIDTH+10);79                         //背景区域的图片80 //                        Image image=ImageUtil.getImageIcon("aaa.jpg").getImage();81 //                        gs.drawImage(image, 0, 0, null);82                     // 设定图像颜色:前景色83                         gs.setColor(Color.black);84                     // 设置偏移量,不设置可能导致解析出错85                         int pixoff = 4;86                         // 输出内容> 二维码87                         if (contentBytes.length > 0 && contentBytes.length < 1800) {88                             for (int i = 0; i < bRect.length; i++) {89                                 for (int j = 0; j < bRect.length; j++) {90                                     if (bRect[j][i]) {91                                          gs.fillRect(j * UNIT_WIDTH + pixoff, 92                                                          i * UNIT_WIDTH+ pixoff, 93                                                          12, 12);94 //                                         gs.drawRect(j * UNIT_WIDTH + pixoff, 95 //                                                     i * UNIT_WIDTH+ pixoff, 96 //                                                     6, 6);97                                     }98                                 }99                             }
100                             //中心区域的图片
101                             Image image2=ImageUtil.getImageIcon("123.jpg").getImage();
102                             //外边框
103                             gs.setColor(Color.white);
104                             gs.fillRect(DEFAULT_WIDTH/8*3-3, DEFAULT_WIDTH/8*3-3,
105                                     (int)(DEFAULT_WIDTH/4+3*Math.sqrt(3)),
106                                     (int)(DEFAULT_WIDTH/4+3*Math.sqrt(3))+4);
107                             //内部背景区域
108                             gs.setColor(Color.white);
109                             gs.fillRect(DEFAULT_WIDTH/8*3, DEFAULT_WIDTH/8*3,
110                                     DEFAULT_WIDTH/4,DEFAULT_WIDTH/4+4);
111                             //画出中心图片
112                             gs.drawImage(image2,
113                                     DEFAULT_WIDTH/8*3+3, DEFAULT_WIDTH/8*3+5,
114                                     DEFAULT_WIDTH/4-6,DEFAULT_WIDTH/4-6,
115                                     null);
116
117                         } else {
118                             throw new Exception("QRCode content bytes length = " + contentBytes.length + " not in [0, 1800].");
119
120                         }
121                         gs.dispose();
122                         bufImg.flush();
123         } catch (UnsupportedEncodingException e) {
124             e.printStackTrace();
125         } catch (Exception e) {
126             // TODO Auto-generated catch block
127             e.printStackTrace();
128         }
129         return bufImg;
130     }
131
132
133
134     /**
135      * 解析二维码(QRCode)
136      * @param imgPath 图片路径
137      * @return
138      */
139     public static String decoderQRCode(String imgPath) {
140         // QRCode 二维码图片的文件
141         File imageFile = new File(imgPath);
142         BufferedImage bufImg = null;
143         String content = null;
144         try {
145             bufImg = ImageIO.read(imageFile);
146             QRCodeDecoder decoder = new QRCodeDecoder();
147             content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8");
148         } catch (IOException e) {
149             System.out.println("Error: " + e.getMessage());
150             e.printStackTrace();
151         } catch (DecodingFailedException dfe) {
152             System.out.println("Error: " + dfe.getMessage());
153             dfe.printStackTrace();
154         }
155         return content;
156     }
157
158     /**
159      * 解析二维码(QRCode)
160      * @param input 输入流
161      * @return
162      */
163     public static String decoderQRCode(InputStream input) {
164         BufferedImage bufImg = null;
165         String content = null;
166         try {
167             bufImg = ImageIO.read(input);
168             QRCodeDecoder decoder = new QRCodeDecoder();
169             content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8");
170         } catch (IOException e) {
171             System.out.println("Error: " + e.getMessage());
172             e.printStackTrace();
173         } catch (DecodingFailedException dfe) {
174             System.out.println("Error: " + dfe.getMessage());
175             dfe.printStackTrace();
176         }
177         return content;
178     }
179
180     /**
181      * 产生二维码图片:
182      * @param infos    二维码信息
183      * @return        返回产生的图片路径
184      */
185     public static String getErWCode(String infos){
186         String imagePath="";
187         try {
188             BufferedImage image = qRCodeCommon(infos, "JPEG",5);
189             String path=QRCodeAction.getProgramPath();
190             imagePath=path+UUID.randomUUID()+".jpg";
191             File file = new File(imagePath);
192             ImageIO.write(image, "jpg", file);
193             if(file.exists()){
194                 System.err.println("新产生一张二维码图片");
195             }
196         } catch (IOException e) {
197             e.printStackTrace();
198         }
199         return imagePath;
200     }
201     public static Image getErWCodeImage(String infos){
202
203
204             BufferedImage image = qRCodeCommon(infos, "JPEG",10);
205             String path=QRCodeAction.getProgramPath();
206
207             Image image2=(Image)image;
208
209         return null;
210     }
211     /**
212      * 获取项目运行根路径
213      * @return
214      */
215     public static  String getProgramPath(){
216         //获得项目运行路径下的图片文件夹
217         String path=QRCodeAction.class.getClassLoader().getResource("./images/ErWCodes/").getPath();
218         return     path;
219     }
220     /**
221      * 程序测试入口
222      * @param args
223      */
224     public static void main(String[] args) {
225
226         //生成二维码
227 //        StringBuffer msg=new StringBuffer();
228 //        msg.append("int[] arr=new int[]{8,2,1,0,3};\r\n");
229 //        msg.append("int[] index=new int[]{2,0,3,2,4,0,1,3,2,3,3};\r\n");
230 //        msg.append("String tel=\"\";\r\n");
231 //        msg.append("for (int i : index) {\r\n");
232 //        msg.append("tel+=arr[i];\r\n");
233 //        msg.append("}\r\n");
234 //        msg.append("System.out.println(\"联系方式:\"+tel);\r\n");
235 //        System.err.println(msg.toString());
236                  QRCodeAction d=new QRCodeAction();
237                  String path=d.getErWCode("我不是体育系的   要不要我这系啊  带你们呦!");
238         //解读二维码
239             //     String infos= d.decoderQRCode(path);
240                  //System.err.println("解析二维码信息:"+infos);
241     }
242
243 }

二维码(带有图片)的生成相关推荐

  1. 简单的二维码生成接口,自动生成二维码,返回图片地址

    自动生成二维码,返回图片地址 本来不想写的,但是怕太久不写这个东西,就要荒废了,就先记录一下简单的东西 这里因为,返回地址的时候,通过了nginx ,我试了很多方法都抓取不到对应的IP地址, 就在ng ...

  2. 网页生成二维码 把二维码变成图片 下载二维码

    目录 网页生成二维码 1 将二维码变成图片 2 1效果:二维码变成了图片 2 下载二维码 2 1全部代码 3 网页生成二维码 导入生成二维码需要的js文件(https://github.com/lrs ...

  3. jquery.qrcode生成带logo的二维码,同时生成带二维码的好友分享图片(js与canvas实现二维码和图片合成的海报)

    首先给大家看一下效果图(纯jQuery前端技术): 提供一下demo 源代码和jquery.qrcode文件下载: https://download.csdn.net/download/qq15577 ...

  4. Java解决生成二维码后图片蒙上红色背景问题

    一.在生成图片,或者将二维码放在图片上生成新图片后,生成的图片会造成红色蒙版问题,这问题是因为jdk中 ImageIO.read(inputStream);里在识别RGB的时候会出现偏差,目前公司用的 ...

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

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

  6. 二维码登录原理及生成与解析

    一.前言 这几天在研究二维码的扫码登录.初来乍到,还有好多东西不懂.在网上看到有人写了一些通过QRCode或者Zxing实现二维码的生成和解码.一时兴起,决定自己亲手试一试.本人是通过QRCode实现 ...

  7. python生成二维码_使用python生成二维码

    1.python-qrcode是个用来生成二维码图片的第三方模块,依赖于 PIL 模块和 qrcode 库. 首先,我们要安装三个模块,qrcode,image,PIL. pip install qr ...

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

    首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老美开发的,barcode4j对一维条形码处理的很好,而且支持的格式很多,当然也可以对二维码进行处理,效果个人 ...

  9. Atitit java 二维码识别 图片识别

    Atitit java 二维码识别 图片识别 1.1. 解码1 1.2. 首先,我们先说一下二维码一共有40个尺寸.官方叫版本Version.1 1.3. 二维码的样例:2 1.4. 定位图案2 1. ...

  10. 小猿圈web前端简述canvas如何实现二维码和图片合成

    你经常看到活动海报什么的,上都是有各种宣传文案以及二维码形成的,你知道怎么用canvas实现二维码和图片合成,下面小猿圈Linux讲师为你详细介绍一下canvas如何实现二维码和图片合成的. 使用ur ...

最新文章

  1. TensorFlow基础10-(误差反向传播算法以及实现多层神经网络)
  2. 人工智能用哪个语言好 选择Python语言怎么样
  3. schema get_ddl
  4. apache.camel_Apache Camel 3.1 –即将推出更多骆驼核心优化
  5. java程序中用户名和密码_在Java应用程序中使用密码术
  6. 虚拟主机选择php版本,虚拟主机的php版本如何选择
  7. OpenGL+VS2012环境搭建
  8. php比赛票数造假算法,PHP可以修改概率的抽奖算法(例如转盘等,个人感觉蛮好用)...
  9. 读 zepto 源码之工具函数
  10. 基于Java实现的禁忌搜索算法
  11. 【历史上的今天】5 月 15 日:Mozilla 发布 Rust;起点中文网成立;Windows 启动音乐设计者出生
  12. 快上车!薅腾讯羊毛!
  13. C++---常见秋招、春招问题汇总(持续更新)
  14. 阿里云ECS数据迁移到阿里云OSS
  15. 对于Android虚拟机启动失败“The emulator process for AVD Nexus_5X_API_30 was killed”的解决方案
  16. windows下python运行的方法
  17. java制作SM2证书
  18. 商用智能显示屏在自动售检票系统(AFC)中的应用
  19. mysql 家谱关系_mysql家谱表查询某人所有后代
  20. 微信小程序的页面导航

热门文章

  1. PTA  部落(并查集)
  2. FLOPs,FLOPS,FPS
  3. 大数据必学语言Scala(三十四):scala高级用法 异常处理
  4. oracle数据库登录日志怎么查询,如何查询Oracle数据库的操作日志
  5. jsdelivr 使用_如何使用JSDelivr
  6. 15.EasyExcel自定义Convert遇到大坑!!!
  7. geohash算法原理及实现方式
  8. 【搬迁通知】账号原有内容搬迁至“三明治开发社区”,欢迎大家关注!
  9. DIY自动驾驶无人机
  10. 玩抖音短视频,注重这4个套路