二维码(带有图片)的生成


/*************编码转换类【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 block
            e.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;
    }

    @Override
    public int getHeight() {
        return bufImg.getHeight();
    }

    @Override
    public int getPixel(int x, int y) {
        return bufImg.getRGB(x, y);
    }

    @Override
    public 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      * @return
 50      */
 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,h
 70                         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 }

时间: 2024-07-30 10:13:48

二维码(带有图片)的生成的相关文章

ajax加一般处理程序或ASP.NET 后台生成带着二维码的图片

ajax加一般处理程序生成带着二维码的图片 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head

为jquery qrcode生成的二维码嵌入图片

在一次微信项目中,需要实现通过扫描二维码来进行会议签到,二维码的生成选择了qrcode.js的版本,然后使用jquery.qrcode.js插件来绘制二维码. <script type="text/javascript" src="jquery-1.8.2.min.js" ></script> <script type="text/javascript" src="jquery.qrcode.js"

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

首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老美开发的,barcode4j对一维条形码处理的很好,而且支持的格式很多,当然也可以对二维码进行处理,效果个人感觉没有前两种好;ZXing对j2me,j2se,还有Android等支持也比较好,如果你是搞Android的或以后准备走Android,建议还是用zxing的比较好,毕竟都一个母亲(goole)生的,QRCode就不用说了吧,虽说技术无国界,但是国人还是有点.... 好,言归正传,java用ZXi

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

场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老美开发的,barcode4j对一维条形码处理的很好,而且支持的格式很多,当然也可以对二维码进行处理,效果个人感觉没有前两种好;ZXing对j2me,j2se,还有Android等支持也比较好,如果你是搞Android的或以后准备走Android,建议还是用zxing的比较好,毕竟都一个母亲(gool

二维码的扫描和生成--第三方开源--ZXing

ZXing的二维码功能的提取lib下载地址:https://github.com/xuyisheng/ZXingLib 1.扫描二维码: 我们扫描就是要用到这个CaptureActivity类,直接把上面下载地址里面下载了里面的libzxing作为Module,如下图: 首先加上权限: <!-- 相机 --> <uses-permission android:name="android.permission.CAMERA" /> <!-- 振动 -->

ios开发日记13-原生二维码的扫描和生成

今天博主有一个二维码扫描和生成的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. 从iOS7开始官方集成了二维码的扫描和生成功能 此前被广泛使用的zbarsdk目前不支持64位处理器 1.扫描二维码 扫描二维码需要导入AVFoundation框架 利用摄像头识别二维码中的内容(模拟器不行) 输入(摄像头) 由会话将摄像头采集到的二维码图像转换成字符串数据 输出(数据) 由预览图层显示扫描场景 // 实例化拍摄设备 AVCaptureDevice *device = [AVCapture

Android之二维码的扫描与生成

今天,来学习使用怎么实现二维码的扫一扫和二维码的生成. 要想实现二维码的扫一扫与二维码的生成,就得必须了解二维码的特征. QRcode: QRCode简介: QRCode全称Quick Response Code. 通过在一个矩形区域内使用黑白像素来进行编码. 高纠错性.高可用性.高识别性. ZXing简介: ZXing是一个开放源码的,用java实现的多种格式为1D/2D条码图形处理库,它包含了联系到其他语言的端口. ZXing可以实现使用手机的内置的摄像头完成条形码的扫描与解码. ZXing

js、jq动态生成海报+动态生成二维码+Logo图片

前言: 最近做项目的时候移动端的发现板块作品需要生成海报,经查阅各种博客发现并没有很多资源,自己就着手写了一个分享给大家 废话不再多说,我们先看一下效果: 我是一名后端程小猿,写成这样已经很不错了,自我感觉良好 哈哈…… 废话不多说,我们开始上代码(怕对小白不友善,这里直接上源码,我自己就是小白 哈哈……): 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5

java 通过Qrcode生成二维码添加图片logo和文字描述

/** * 二维码创建 * @author yhzm * */ public class printServiceImpl extends BaseService { public void barCodeGenera() { init(false); //先创建一个二维码 String text = strRequiredParam("barcode","二维码信息"); String desc = strRequiredParam("desc"

PHP和Jquery生成二维码,以及PHP生成电子名片

自从跳槽了,就没有发过博客了,很愧疚,我是自学的PHP,现在这家公司加上老板才12个人,我是典型的从分工明确的公司跳槽到小公司,深刻体会到了所谓'大公司'和'小公司'的区别,上一个公司,一个项目到我这里,静态页都是写好的,我只需要将数据动态加载就行了,但是目前这个公司,典型的一个人当几个人用,我刚去公司一个多月,直接让我做项目经理的工作,去甲方公司需求调研,然后自己开发,除开设计和切图,我基本上都参与.锻炼人说实话还是小公司较好,但是锻炼技术我觉得还是大公司较好,因为我在我上一家公司呆了3个月,