我是靠谱客的博主 苗条铃铛,最近开发中收集的这篇文章主要介绍Java实现二维码QRCode的编码和解码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java实现二维码QRCode的编码和解码

转载于http://blog.sina.com.cn/s/blog_6d0c4e33010190uk.html


周末试用下Android手机的二维码扫描软件,扫描了下火车票、名片等等,觉得非常不错很有意思的。当然Java也可以实现这些,现在就分享下如何简单用Java实现二维码中QRCode的编码和解码(可以手机扫描验证)。

 

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

  • 编码 lib:Qrcode_swetake.jar (官网介绍 -- http://www.swetake.com/qr/index-e.html)
  • 解码 lib:qrcode.jar (官网介绍 -- http://sourceforge.jp/projects/qrcode/)

 

【一】、编码:

QRCodeEncoderHandler.java

Java代码  收藏代码
  1. package michael.qrcode;
  2. import java.awt.Color;
  3. import java.awt.Graphics2D;
  4. import java.awt.image.BufferedImage;
  5. import java.io.File;
  6. import javax.imageio.ImageIO;
  7. import com.swetake.util.Qrcode;
  8. public class QRCodeEncoderHandler {
  9. public void encoderQRCode(String content, String imgPath) {
  10. try {
  11. Qrcode qrcodeHandler = new Qrcode();
  12. qrcodeHandler.setQrcodeErrorCorrect('M');
  13. qrcodeHandler.setQrcodeEncodeMode('B');
  14. qrcodeHandler.setQrcodeVersion(7);
  15. System.out.println(content);
  16. byte[] contentBytes = content.getBytes("gb2312");
  17. BufferedImage bufImg = new BufferedImage(140, 140,
  18. BufferedImage.TYPE_INT_RGB);
  19. Graphics2D gs = bufImg.createGraphics();
  20. gs.setBackground(Color.WHITE);
  21. gs.clearRect(0, 0, 140, 140);
  22. // 设定图像颜色 > BLACK
  23. gs.setColor(Color.BLACK);
  24. // 设置偏移量 不设置可能导致解析出错
  25. int pixoff = 2;
  26. // 输出内容 > 二维码
  27. if (contentBytes.length > 0 && contentBytes.length < 120) {
  28. boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
  29. for (int i = 0; i < codeOut.length; i++) {
  30. for (int j = 0; j < codeOut.length; j++) {
  31. if (codeOut[j][i]) {
  32. gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
  33. }
  34. }
  35. }
  36. else {
  37. System.err.println("QRCode content bytes length = "
  38. + contentBytes.length + " not in [ 0,120 ]. ");
  39. }
  40. gs.dispose();
  41. bufImg.flush();
  42. File imgFile = new File(imgPath);
  43. // 生成二维码QRCode图片
  44. ImageIO.write(bufImg, "png", imgFile);
  45. catch (Exception e) {
  46. e.printStackTrace();
  47. }
  48. }
  49. public static void main(String[] args) {
  50. String imgPath = "D:/test/twocode/Michael_QRCode.png";
  51. String content = "Hello 大大、小小,welcome to QRCode!"
  52. "nMyblog [ http://sjsky.iteye.com ]"
  53. "nEMail [ sjsky007@gmail.com ]" + "nTwitter [ @suncto ]";
  54. QRCodeEncoderHandler handler = new QRCodeEncoderHandler();
  55. handler.encoderQRCode(content, imgPath);
  56. System.out.println("encoder QRcode success");
  57. }
  58. }

 

运行后生成的二维码图片如下:


 

此时就可用手机的二维码扫描软件(本人用的:android 快拍二维码 )来测试下,识别成功的截图如下:


喜欢的朋友可以下载后试一试,做一些名片或者自己喜欢的东西。当然Java也可以对二维码图片解码,具体看下面关于解码的内容。

 

 

【二】、解码:
QRCodeDecoderHandler.java

Java代码  收藏代码
  1. package michael.qrcode;
  2. import java.awt.image.BufferedImage;
  3. import java.io.File;
  4. import java.io.IOException;
  5. import javax.imageio.ImageIO;
  6. import jp.sourceforge.qrcode.QRCodeDecoder;
  7. import jp.sourceforge.qrcode.data.QRCodeImage;
  8. import jp.sourceforge.qrcode.exception.DecodingFailedException;
  9. public class QRCodeDecoderHandler {
  10. public String decoderQRCode(String imgPath) {
  11. // QRCode 二维码图片的文件
  12. File imageFile = new File(imgPath);
  13. BufferedImage bufImg = null;
  14. String decodedData = null;
  15. try {
  16. bufImg = ImageIO.read(imageFile);
  17. QRCodeDecoder decoder = new QRCodeDecoder();
  18. decodedData = new String(decoder.decode(new J2SEImage(bufImg)));
  19. // try {
  20. // System.out.println(new String(decodedData.getBytes("gb2312"),
  21. // "gb2312"));
  22. // } catch (Exception e) {
  23. // // TODO: handle exception
  24. // }
  25. catch (IOException e) {
  26. System.out.println("Error: " + e.getMessage());
  27. e.printStackTrace();
  28. catch (DecodingFailedException dfe) {
  29. System.out.println("Error: " + dfe.getMessage());
  30. dfe.printStackTrace();
  31. }
  32. return decodedData;
  33. }
  34. public static void main(String[] args) {
  35. QRCodeDecoderHandler handler = new QRCodeDecoderHandler();
  36. String imgPath = "d:/test/twocode/Michael_QRCode.png";
  37. String decoderContent = handler.decoderQRCode(imgPath);
  38. System.out.println("解析结果如下:");
  39. System.out.println(decoderContent);
  40. System.out.println("========decoder success!!!");
  41. }
  42. class J2SEImage implements QRCodeImage {
  43. BufferedImage bufImg;
  44. public J2SEImage(BufferedImage bufImg) {
  45. this.bufImg = bufImg;
  46. }
  47. public int getWidth() {
  48. return bufImg.getWidth();
  49. }
  50. public int getHeight() {
  51. return bufImg.getHeight();
  52. }
  53. public int getPixel(int x, int y) {
  54. return bufImg.getRGB(x, y);
  55. }
  56. }
  57. }

 

运行结果如下(解码出的内容和之前输入的内容一致 ):

解析结果如下:
Hello 大大、小小,welcome to QRCode!
Myblog [ http://sjsky.iteye.com ]
EMail [ sjsky007@gmail.com ]
Twitter [ @suncto ]

========decoder success!!!

最后

以上就是苗条铃铛为你收集整理的Java实现二维码QRCode的编码和解码的全部内容,希望文章能够帮你解决Java实现二维码QRCode的编码和解码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部