Java实现二维码QRCode的编码和解码与示例解析
程序员文章站
2024-03-13 11:22:48
java实现二维码qrcode的编码和解码
涉及到的一些主要类库,方便大家下载:
编码lib:qrcode_swetake.jar (官网介...
java实现二维码qrcode的编码和解码
涉及到的一些主要类库,方便大家下载:
编码lib:qrcode_swetake.jar (官网介绍-- http://www.swetake.com/qr/index-e.html)
解码lib:qrcode.jar (官网介绍-- http://sourceforge.jp/projects/qrcode/)
【一】、编码:
java代码qrcodeencoderhandler.java
package michael.qrcode; import java.awt.color; import java.awt.graphics2d; import java.awt.image.bufferedimage; import java.io.file; import javax.imageio.imageio; import com.swetake.util.qrcode; /** * 二维码生成器 * @blog http://sjsky.iteye.com * @author michael */ public class qrcodeencoderhandler { /** * 生成二维码(qrcode)图片 * @param content * @param imgpath */ public void encoderqrcode(string content, string imgpath) { try { qrcode qrcodehandler = new qrcode(); qrcodehandler.setqrcodeerrorcorrect('m'); qrcodehandler.setqrcodeencodemode('b'); qrcodehandler.setqrcodeversion(7); system.out.println(content); byte[] contentbytes = content.getbytes("gb2312"); bufferedimage bufimg = new bufferedimage(140, 140, bufferedimage.type_int_rgb); graphics2d gs = bufimg.creategraphics(); gs.setbackground(color.white); gs.clearrect(0, 0, 140, 140); // 设定图像颜色> black gs.setcolor(color.black); // 设置偏移量 不设置可能导致解析出错 int pixoff = 2; // 输出内容> 二维码 if (contentbytes.length > 0 && contentbytes.length < 120) { boolean[][] codeout = qrcodehandler.calqrcode(contentbytes); for (int i = 0; i < codeout.length; i++) { for (int j = 0; j < codeout.length; j++) { if (codeout[j][i]) { gs.fillrect(j * 3 + pixoff, i * 3 + pixoff, 3, 3); } } } } else { system.err.println("qrcode content bytes length = " + contentbytes.length + " not in [ 0,120 ]. "); } gs.dispose(); bufimg.flush(); file imgfile = new file(imgpath); // 生成二维码qrcode图片 imageio.write(bufimg, "png", imgfile); } catch (exception e) { e.printstacktrace(); } } /** * @param args the command line arguments */ public static void main(string[] args) { string imgpath = "d:/test/twocode/michael_qrcode.png"; string content = "hello 大大、小小,welcome to qrcode!" + "\nmyblog [ http://sjsky.iteye.com ]" + "\nemail [ sjsky007@gmail.com ]" + "\ntwitter [ @suncto ]"; qrcodeencoderhandler handler = new qrcodeencoderhandler(); handler.encoderqrcode(content, imgpath); system.out.println("encoder qrcode success"); } }
运行后生成的二维码图片如下:
此时就可用手机的二维码扫描软件(本人用的:android 快拍二维码 )来测试下,识别成功的截图如下:
喜欢的朋友可以下载后试一试,做一些名片或者自己喜欢的东西。当然java也可以对二维码图片解码,具体看下面关于解码的内容。
【二】、解码:
java代码qrcodedecoderhandler.java
package michael.qrcode; import java.awt.image.bufferedimage; import java.io.file; import java.io.ioexception; import javax.imageio.imageio; import jp.sourceforge.qrcode.qrcodedecoder; import jp.sourceforge.qrcode.data.qrcodeimage; import jp.sourceforge.qrcode.exception.decodingfailedexception; /** * @blog http://sjsky.iteye.com * @author michael */ public class qrcodedecoderhandler { /** * 解码二维码 * @param imgpath * @return string */ public string decoderqrcode(string imgpath) { // qrcode 二维码图片的文件 file imagefile = new file(imgpath); bufferedimage bufimg = null; string decodeddata = null; try { bufimg = imageio.read(imagefile); qrcodedecoder decoder = new qrcodedecoder(); decodeddata = new string(decoder.decode(new j2seimage(bufimg))); // try { // system.out.println(new string(decodeddata.getbytes("gb2312"), // "gb2312")); // } catch (exception e) { // // todo: handle exception // } } catch (ioexception e) { system.out.println("error: " + e.getmessage()); e.printstacktrace(); } catch (decodingfailedexception dfe) { system.out.println("error: " + dfe.getmessage()); dfe.printstacktrace(); } return decodeddata; } /** * @param args the command line arguments */ public static void main(string[] args) { qrcodedecoderhandler handler = new qrcodedecoderhandler(); string imgpath = "d:/test/twocode/michael_qrcode.png"; string decodercontent = handler.decoderqrcode(imgpath); system.out.println("解析结果如下:"); system.out.println(decodercontent); system.out.println("========decoder success!!!"); } class j2seimage implements qrcodeimage { bufferedimage bufimg; public j2seimage(bufferedimage bufimg) { this.bufimg = bufimg; } public int getwidth() { return bufimg.getwidth(); } public int getheight() { return bufimg.getheight(); } public int getpixel(int x, int y) { return bufimg.getrgb(x, y); } } }
运行结果如下(解码出的内容和之前输入的内容一致 ):
解析结果如下:
hello 大大、小小,welcome to qrcode!
myblog [ http://sjsky.iteye.com ]
email [ sjsky007@gmail.com ]
twitter [ @suncto ]
========decoder success!!!
以上就是对java实现二维码qrcode的编码和解码的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!