二维码_encode与decode

二维码encode和decode工具类

[html] view plain copy

 print?

  1. import java.awt.Color;    
  2. import java.awt.Graphics2D;    
  3. import java.awt.image.BufferedImage;    
  4. import java.io.File;    
  5. import java.io.IOException;    
  6. import java.io.InputStream;    
  7. import java.io.OutputStream;    
  8.     
  9. import javax.imageio.ImageIO;    
  10.     
  11. import jp.sourceforge.qrcode.QRCodeDecoder;    
  12. import jp.sourceforge.qrcode.exception.DecodingFailedException;    
  13.     
  14. import com.swetake.util.Qrcode;    
  15.     
  16. public class TwoDimensionCode {    
  17.         
  18.     /**   
  19.      * 生成二维码(QRCode)图片   
  20.      * @param content 存储内容   
  21.      * @param imgPath 图片路径   
  22.      */    
  23.     public void encoderQRCode(String content, String imgPath) {    
  24.         this.encoderQRCode(content, imgPath, "png", 7);    
  25.     }    
  26.         
  27.     /**   
  28.      * 生成二维码(QRCode)图片   
  29.      * @param content 存储内容   
  30.      * @param output 输出流   
  31.      */    
  32.     public void encoderQRCode(String content, OutputStream output) {    
  33.         this.encoderQRCode(content, output, "png", 7);    
  34.     }    
  35.         
  36.     /**   
  37.      * 生成二维码(QRCode)图片   
  38.      * @param content 存储内容   
  39.      * @param imgPath 图片路径   
  40.      * @param imgType 图片类型   
  41.      */    
  42.     public void encoderQRCode(String content, String imgPath, String imgType) {    
  43.         this.encoderQRCode(content, imgPath, imgType, 7);    
  44.     }    
  45.         
  46.     /**   
  47.      * 生成二维码(QRCode)图片   
  48.      * @param content 存储内容   
  49.      * @param output 输出流   
  50.      * @param imgType 图片类型   
  51.      */    
  52.     public void encoderQRCode(String content, OutputStream output, String imgType) {    
  53.         this.encoderQRCode(content, output, imgType, 7);    
  54.     }    
  55.     
  56.     /**   
  57.      * 生成二维码(QRCode)图片   
  58.      * @param content 存储内容   
  59.      * @param imgPath 图片路径   
  60.      * @param imgType 图片类型   
  61.      * @param size 二维码尺寸   
  62.      */    
  63.     public void encoderQRCode(String content, String imgPath, String imgType, int size) {    
  64.         try {    
  65.             BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);    
  66.                 
  67.             File imgFile = new File(imgPath);    
  68.             // 生成二维码QRCode图片    
  69.             ImageIO.write(bufImg, imgType, imgFile);    
  70.         } catch (Exception e) {    
  71.             e.printStackTrace();    
  72.         }    
  73.     }    
  74.     
  75.     /**   
  76.      * 生成二维码(QRCode)图片   
  77.      * @param content 存储内容   
  78.      * @param output 输出流   
  79.      * @param imgType 图片类型   
  80.      * @param size 二维码尺寸   
  81.      */    
  82.     public void encoderQRCode(String content, OutputStream output, String imgType, int size) {    
  83.         try {    
  84.             BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);    
  85.             // 生成二维码QRCode图片    
  86.             ImageIO.write(bufImg, imgType, output);    
  87.         } catch (Exception e) {    
  88.             e.printStackTrace();    
  89.         }    
  90.     }    
  91.         
  92.     /**   
  93.      * 生成二维码(QRCode)图片的公共方法   
  94.      * @param content 存储内容   
  95.      * @param imgType 图片类型   
  96.      * @param size 二维码尺寸   
  97.      * @return   
  98.      */    
  99.     private BufferedImage qRCodeCommon(String content, String imgType, int size) {    
  100.         BufferedImage bufImg = null;    
  101.         try {    
  102.             Qrcode qrcodeHandler = new Qrcode();    
  103.             // 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小    
  104.             qrcodeHandler.setQrcodeErrorCorrect('M');    
  105.             qrcodeHandler.setQrcodeEncodeMode('B');    
  106.             // 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大    
  107.             qrcodeHandler.setQrcodeVersion(size);    
  108.             // 获得内容的字节数组,设置编码格式    
  109.             byte[] contentBytes = content.getBytes("utf-8");    
  110.             // 图片尺寸    
  111.             int imgSize = 67 + 12 * (size - 1);    
  112.             bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB);    
  113.             Graphics2D gs = bufImg.createGraphics();    
  114.             // 设置背景颜色    
  115.             gs.setBackground(Color.WHITE);    
  116.             gs.clearRect(0, 0, imgSize, imgSize);    
  117.     
  118.             // 设定图像颜色> BLACK    
  119.             gs.setColor(Color.BLACK);    
  120.             // 设置偏移量,不设置可能导致解析出错    
  121.             int pixoff = 2;    
  122.             // 输出内容> 二维码    
  123.             if (contentBytes.length > 0 && contentBytes.length < 800) {    
  124.                 boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);    
  125.                 for (int i = 0; i < codeOut.length; i++) {    
  126.                     for (int j = 0; j < codeOut.length; j++) {    
  127.                         if (codeOut[j][i]) {    
  128.                             gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);    
  129.                         }    
  130.                     }    
  131.                 }    
  132.             } else {    
  133.                 throw new Exception("QRCode content bytes length = " + contentBytes.length + " not in [0, 800].");    
  134.             }    
  135.             gs.dispose();    
  136.             bufImg.flush();    
  137.         } catch (Exception e) {    
  138.             e.printStackTrace();    
  139.         }    
  140.         return bufImg;    
  141.     }    
  142.         
  143.     /**   
  144.      * 解析二维码(QRCode)   
  145.      * @param imgPath 图片路径   
  146.      * @return   
  147.      */    
  148.     public String decoderQRCode(String imgPath) {    
  149.         // QRCode 二维码图片的文件    
  150.         File imageFile = new File(imgPath);    
  151.         BufferedImage bufImg = null;    
  152.         String content = null;    
  153.         try {    
  154.             bufImg = ImageIO.read(imageFile);    
  155.             QRCodeDecoder decoder = new QRCodeDecoder();    
  156.             content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8");     
  157.         } catch (IOException e) {    
  158.             System.out.println("Error: " + e.getMessage());    
  159.             e.printStackTrace();    
  160.         } catch (DecodingFailedException dfe) {    
  161.             System.out.println("Error: " + dfe.getMessage());    
  162.             dfe.printStackTrace();    
  163.         }    
  164.         return content;    
  165.     }    
  166.         
  167.     /**   
  168.      * 解析二维码(QRCode)   
  169.      * @param input 输入流   
  170.      * @return   
  171.      */    
  172.     public String decoderQRCode(InputStream input) {    
  173.         BufferedImage bufImg = null;    
  174.         String content = null;    
  175.         try {    
  176.             bufImg = ImageIO.read(input);    
  177.             QRCodeDecoder decoder = new QRCodeDecoder();    
  178.             content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8");     
  179.         } catch (IOException e) {    
  180.             System.out.println("Error: " + e.getMessage());    
  181.             e.printStackTrace();    
  182.         } catch (DecodingFailedException dfe) {    
  183.             System.out.println("Error: " + dfe.getMessage());    
  184.             dfe.printStackTrace();    
  185.         }    
  186.         return content;    
  187.     }    
  188.     
  189.     public static void main(String[] args) {    
  190.         String imgPath = "E:/abc.png";    
  191.         String encoderContent = "http://blog.csdn.net/benjamin_whx";    
  192.         TwoDimensionCode handler = new TwoDimensionCode();    
  193.         handler.encoderQRCode(encoderContent, imgPath, "png");    
  194. //      try {    
  195. //          OutputStream output = new FileOutputStream(imgPath);    
  196. //          handler.encoderQRCode(content, output);    
  197. //      } catch (Exception e) {    
  198. //          e.printStackTrace();    
  199. //      }    
  200.         System.out.println("========encoder success");    
  201.             
  202.             
  203.         String decoderContent = handler.decoderQRCode("E:/aaa.jpg");    
  204.         System.out.println("解析结果如下:");    
  205.         System.out.println(decoderContent);    
  206.         System.out.println("========decoder success!!!");    
  207.     }    
  208. }    

TwoDimensionCodeImage对象类

[html] view plain copy

 print?

  1. import java.awt.image.BufferedImage;    
  2.     
  3. import jp.sourceforge.qrcode.data.QRCodeImage;    
  4.     
  5. public class TwoDimensionCodeImage implements QRCodeImage {    
  6.     
  7.     BufferedImage bufImg;    
  8.         
  9.     public TwoDimensionCodeImage(BufferedImage bufImg) {    
  10.         this.bufImg = bufImg;    
  11.     }    
  12.         
  13.     @Override    
  14.     public int getHeight() {    
  15.         return bufImg.getHeight();    
  16.     }    
  17.     
  18.     @Override    
  19.     public int getPixel(int x, int y) {    
  20.         return bufImg.getRGB(x, y);    
  21.     }    
  22.     
  23.     @Override    
  24.     public int getWidth() {    
  25.         return bufImg.getWidth();    
  26.     }    
  27.     
  28. }    

jar包下载http://download.csdn.net/detail/u012959829/7941481

时间: 2024-10-27 16:49:20

二维码_encode与decode的相关文章

java实现二维码([带]logo)的绘制和解析(zxing by google)

二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的:在代码编制上巧妙地利用构成计算机内部逻辑基础的"0"."1"比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集:每个字符占有一定的宽度:具有一定的校验功能等.同时还具有对不同行的信息自动识

使用zxing工具包创建和解析二维码

关于二维码是什么,以及二维码是如何生成的,我也没有研究得很深入,就不多说了,以免误导大家.请参看: java 二维码原理以及用java实现的二维码的生成.解码 二维码的生成细节和原理 下面是一个可以生成和解析二维码的工具类,该类用到了zxing工具包,我通过Maven去下载的: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 <dependencies>     <!-- JavaSE包依赖于Core包,因此Core包不需要直接依赖了     <dependency

asp.net C#生成和解析二维码代码

  类库文件我们在文件最后面下载 [ThoughtWorks.QRCode.dll 就是类库] 使用时需要增加: using ThoughtWorks.QRCode.Codec; using ThoughtWorks.QRCode.Codec.Data; using ThoughtWorks.QRCode.Codec.Util; 主要源代码: 1.生成二维码 代码如下   QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); String enco

基于zxing生成与解析二维码、条形码

     基于zxing(https://github.com/zxing/zxing)与maven,针对二维码(包括带图片的二维码).条形码进行了简单的封装,以便在项目中更好的利用.     ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台下的客户端包括:J2ME.J2SE和Android      关于二维码的生成细节与原理,请参考:http://coolshell.cn/arti

java利用zxing包解二维码

问题描述 java利用zxing包解二维码 我在网上找了一个解二维码的代码,利用的zxing包的功能解码,代码和zxing包都是现成的,编译通过然后运行是有些二维码能解析出来,有些就解析不出来.求大神 package test; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.net.URLDecoder; import java.util.Enum

使用Qrcode第三方组件生成二维码

/** * 使用QRCODE 生成二维码图片 */ package com.qrcode; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.O

点阵的datamatrix二维码,扫不出来

问题描述 点阵的datamatrix二维码,扫不出来 使用zxing开源框架做的扫二维码.点阵的datamatrix二维码,扫不出来,是什么原因啊? 如果是矩阵的就能很好的扫出来.是不是哪里需要设置呢?跪求大哥们的帮助....!!! private void decode(byte[] data, int width, int height) { long start = System.currentTimeMillis(); Result rawResult = null; //扫描结果 //

Android开源二维码识别项目zxing横屏改为竖屏识别解决方案

在网上找了很多方法,但最后都有问题,自己调试了好几个小时,最后终于完美解决了竖屏识别. 首先你需要有zxing项目的简化版代码. 使用简化版可以免去许多不必要的代码,方便学习研究,更好定位核心功能. 如果你调试成功后,就可以着手修改将其变为竖屏识别了. 第1步: 在AndroidManifest中将CaptureActivity的screenOrientation属性做如下修改: android:screenOrientation="portrait"  第2步: 我们要把摄像头预览景

几行代码搞定java生成解析二维码功能

最近公司要求扫描二维码和生成二维码的功能.而群里部分网友也提到了.我这里就写了一个demo,和大家分享.代码很简介,希望大家能够喜欢. 网友表示在网上搜索了很多,发现不是代码不全,就是jar不匹配. 我这里共享了一个zxing的2.2版本的例子,也提供了下载地址.实现代码如下: package com.herman.test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcep