二维码(带有图片)的生成
/*************编码转换类【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 }
二维码(带有图片)的生成相关推荐
- 简单的二维码生成接口,自动生成二维码,返回图片地址
自动生成二维码,返回图片地址 本来不想写的,但是怕太久不写这个东西,就要荒废了,就先记录一下简单的东西 这里因为,返回地址的时候,通过了nginx ,我试了很多方法都抓取不到对应的IP地址, 就在ng ...
- 网页生成二维码 把二维码变成图片 下载二维码
目录 网页生成二维码 1 将二维码变成图片 2 1效果:二维码变成了图片 2 下载二维码 2 1全部代码 3 网页生成二维码 导入生成二维码需要的js文件(https://github.com/lrs ...
- jquery.qrcode生成带logo的二维码,同时生成带二维码的好友分享图片(js与canvas实现二维码和图片合成的海报)
首先给大家看一下效果图(纯jQuery前端技术): 提供一下demo 源代码和jquery.qrcode文件下载: https://download.csdn.net/download/qq15577 ...
- Java解决生成二维码后图片蒙上红色背景问题
一.在生成图片,或者将二维码放在图片上生成新图片后,生成的图片会造成红色蒙版问题,这问题是因为jdk中 ImageIO.read(inputStream);里在识别RGB的时候会出现偏差,目前公司用的 ...
- (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果
场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老 ...
- 二维码登录原理及生成与解析
一.前言 这几天在研究二维码的扫码登录.初来乍到,还有好多东西不懂.在网上看到有人写了一些通过QRCode或者Zxing实现二维码的生成和解码.一时兴起,决定自己亲手试一试.本人是通过QRCode实现 ...
- python生成二维码_使用python生成二维码
1.python-qrcode是个用来生成二维码图片的第三方模块,依赖于 PIL 模块和 qrcode 库. 首先,我们要安装三个模块,qrcode,image,PIL. pip install qr ...
- ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果
首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老美开发的,barcode4j对一维条形码处理的很好,而且支持的格式很多,当然也可以对二维码进行处理,效果个人 ...
- Atitit java 二维码识别 图片识别
Atitit java 二维码识别 图片识别 1.1. 解码1 1.2. 首先,我们先说一下二维码一共有40个尺寸.官方叫版本Version.1 1.3. 二维码的样例:2 1.4. 定位图案2 1. ...
- 小猿圈web前端简述canvas如何实现二维码和图片合成
你经常看到活动海报什么的,上都是有各种宣传文案以及二维码形成的,你知道怎么用canvas实现二维码和图片合成,下面小猿圈Linux讲师为你详细介绍一下canvas如何实现二维码和图片合成的. 使用ur ...
最新文章
- TensorFlow基础10-(误差反向传播算法以及实现多层神经网络)
- 人工智能用哪个语言好 选择Python语言怎么样
- schema get_ddl
- apache.camel_Apache Camel 3.1 –即将推出更多骆驼核心优化
- java程序中用户名和密码_在Java应用程序中使用密码术
- 虚拟主机选择php版本,虚拟主机的php版本如何选择
- OpenGL+VS2012环境搭建
- php比赛票数造假算法,PHP可以修改概率的抽奖算法(例如转盘等,个人感觉蛮好用)...
- 读 zepto 源码之工具函数
- 基于Java实现的禁忌搜索算法
- 【历史上的今天】5 月 15 日:Mozilla 发布 Rust;起点中文网成立;Windows 启动音乐设计者出生
- 快上车!薅腾讯羊毛!
- C++---常见秋招、春招问题汇总(持续更新)
- 阿里云ECS数据迁移到阿里云OSS
- 对于Android虚拟机启动失败“The emulator process for AVD Nexus_5X_API_30 was killed”的解决方案
- windows下python运行的方法
- java制作SM2证书
- 商用智能显示屏在自动售检票系统(AFC)中的应用
- mysql 家谱关系_mysql家谱表查询某人所有后代
- 微信小程序的页面导航