前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >二维码的生成和解码Java实现

二维码的生成和解码Java实现

原创
作者头像
用户8671053
修改2021-09-23 14:36:48
6450
修改2021-09-23 14:36:48
举报
文章被收录于专栏:码农的生活

涉及到的一些主要类库,方便大家下载:

  • 二维码编码lib:Qrcode_swetake.jar
  • 二维码解码lib:qrcode.jar

java二维码 生成二维码 QRCodeEncoderHandler.java

代码语言:javascript
复制
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://zhblog.github.com/blog
@author zzh
*/
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("utf-8");

 BufferedImage bufImg = new BufferedImage(140, 140,
         BufferedImage.TYPE_INT_RGB);

 Graphics2D gs = bufImg.createGraphics();

 gs.setBackground(Color.cyan);
 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 = "./zzh.png";
String content = "\t江湖在喝酒的路上"

     + "\nMyblog  :http://zhblog.github.com/blog"
     + "\nEMail   :jack.zh.1986@gmail.com"
     + "\nQQ      :715443050";

 
QRCodeEncoderHandler handler = new QRCodeEncoderHandler();
 handler.encoderQRCode(content, imgPath);
 System.out.println("encoder QRcode success");
}
}</pre> 

 
 java二维码解码 QRCodeDecoderHandler.java  
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://zhblog.github.com/blog
@author zzh
*/
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)));
 
} 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 = "zzh.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);
 
}
}
}</pre> 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • java二维码 生成二维码 QRCodeEncoderHandler.java
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档