当前位置: 移动技术网 > IT编程>开发语言>Java > Java实现二维码QRCode的编码和解码与示例解析

Java实现二维码QRCode的编码和解码与示例解析

2019年07月22日  | 移动技术网IT编程  | 我要评论

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的编码和解码的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网