zxing 生成/解析 1/二维码
zxing 生成/解析 一/二维码
在http://code.google.com/p/zxing/下载zxing压缩包(我用的Zxing-1.7)
附件是我把1.7源码打的一个jar包
封装成一个类.
ImgUtil.java
下面是测试类:
下面是生成的两个图片:

生成读取都可以
你看好了,我文章是放在j2ee下,不是放在android下的.....android下没BufferedImage这个类
在http://code.google.com/p/zxing/下载zxing压缩包(我用的Zxing-1.7)
附件是我把1.7源码打的一个jar包
封装成一个类.
ImgUtil.java
package com.iaiai; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Hashtable; import javax.imageio.ImageIO; import com.google.zxing.BarcodeFormat; import com.google.zxing.BinaryBitmap; import com.google.zxing.DecodeHintType; import com.google.zxing.EncodeHintType; import com.google.zxing.LuminanceSource; import com.google.zxing.MultiFormatReader; import com.google.zxing.MultiFormatWriter; import com.google.zxing.Reader; import com.google.zxing.ReaderException; import com.google.zxing.Result; import com.google.zxing.client.j2se.BufferedImageLuminanceSource; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.common.HybridBinarizer; /** * * <p> * Title: ImgUtil.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-9-30 * </p> * * @author 丸子 * @version 0.0.1 */ public class ImgUtil { private static final int BLACK = 0xff000000; private static final int WHITE = 0xFFFFFFFF; /** * 读取一维和二维码 * * @param path * 文件地址,全路径 * @return */ public static String read(String path) { return read(path, "UTF-8"); } /** * 读取一维和二维码 * * @param path * 文件地址,全路径 * @param coding * 文字编码 * @return */ public static String read(String path, String coding) { try { Reader reader = new MultiFormatReader(); File file = new File(path); BufferedImage image; image = ImageIO.read(file); if (image == null) { return null; } LuminanceSource source = new BufferedImageLuminanceSource(image); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Result result; Hashtable hints = new Hashtable(); hints.put(DecodeHintType.CHARACTER_SET, coding); // 解码设置编码方式为:utf-8 result = new MultiFormatReader().decode(bitmap, hints); String resultStr = result.getText(); return resultStr; } catch (Exception ex) { return null; } } /** * 生成1维码图片 * * @param path * 文件地址,全路径 * @param content * 内容 */ public static void write1D(String path, String content) { write1D(path, content, "png", 200, 100); } /** * 生成1维码图片 * * @param path * 文件地址,全路径 * @param content * 内容 * @param suffix * 图片后缀 * @param imgWidth * 图片宽 * @param imgHeight * 图片高 */ public static void write1D(String path, String content, String suffix, int imgWidth, int imgHeight) { int codeWidth = 3 + (7 * 6) + 5 + (7 * 6) + 3; codeWidth = Math.max(codeWidth, imgWidth); try { BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.CODE_128, codeWidth, imgHeight, null); MatrixToImageWriter.writeToFile(bitMatrix, suffix, new File(path)); } catch (Exception e) { e.printStackTrace(); } } /** * 生成2维码图片 * * @param path * 文件地址,全路径 * @param content * 文字内容,不能为空 */ public static void write2D(String path, String content) { write2D(path, content, "png", "UTF-8", 200, 200); } /** * 生成2维码图片 * * @param path * 文件地址,全路径 * @param content * 文字内容,不能为空 * @param suffix * 生成图片后缀 * @param coding * 编码 * @param imgWidth * 图片宽 * @param imgHeight * 图片高 */ public static void write2D(String path, String content, String suffix, String coding, int imgWidth, int imgHeight) { try { BitMatrix byteMatrix; Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>(); hints.put(EncodeHintType.CHARACTER_SET, coding); // 文字编码。 byteMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, imgWidth, imgHeight, hints); File file = new File(path); BufferedImage image = toBufferedImage(byteMatrix); ImageIO.write(image, suffix, file); // QRCodeWriter writer = new QRCodeWriter(); // BitMatrix bitMatrix = null; // try { // bitMatrix = writer.encode("姓名:张三,性别:男,年龄:25,籍贯:中国北京", // BarcodeFormat.QR_CODE, 300, 300); // MatrixToImageWriter.writeToFile(bitMatrix, "png", new // File("D://test.png")); // } catch (WriterException e) { // e.printStackTrace(); // } catch (IOException e) { // e.printStackTrace(); // } } catch (Exception e) { e.printStackTrace(); } } private static BufferedImage toBufferedImage(BitMatrix matrix) { int width = matrix.getWidth(); int height = matrix.getHeight(); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE); } } return image; } }
下面是测试类:
package com.iaiai; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Hashtable; import javax.imageio.ImageIO; import com.google.zxing.BarcodeFormat; import com.google.zxing.BinaryBitmap; import com.google.zxing.DecodeHintType; import com.google.zxing.EncodeHintType; import com.google.zxing.LuminanceSource; import com.google.zxing.MultiFormatReader; import com.google.zxing.MultiFormatWriter; import com.google.zxing.Reader; import com.google.zxing.ReaderException; import com.google.zxing.Result; import com.google.zxing.client.j2se.BufferedImageLuminanceSource; import com.google.zxing.common.BitMatrix; import com.google.zxing.common.HybridBinarizer; /** * * <p> * Title: Iaiai.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-9-30 * </p> * * @author 丸子 * @version 0.0.1 */ public class Iaiai { /** * @param args */ public static void main(String[] args) { ImgUtil.write2D("D:/test.png", "姓名:丸子,性别:男,年龄:未知,籍贯:河北石家庄"); System.out.println(ImgUtil.read("D://test.png")); ImgUtil.write1D("d:/test1.png", "122222"); //1维码必须是数字,不能为中文 System.out.println(ImgUtil.read("D:/test1.png")); } }
下面是生成的两个图片:
1 楼
陈文景
2011-12-07
请问你的代码是 把二维码图片解析成字符串吗 求指点
2 楼
小杨学JAVA
2012-02-01
可以发一份zxing的源码吗,我下的么有com.google.zxing.client.j2se.BufferedImageLuminanceSource;
3 楼
iaiai
2012-02-01
陈文景 写道
请问你的代码是 把二维码图片解析成字符串吗 求指点
生成读取都可以
4 楼
cokepanm
2012-03-21
你好,我加了你的zxing.jar后说缺
java.lang.NoClassDefFoundError: java.awt.image.BufferedImage
java.lang.NoClassDefFoundError: java.awt.image.BufferedImage
5 楼
iaiai
2012-03-22
cokepanm 写道
你好,我加了你的zxing.jar后说缺
java.lang.NoClassDefFoundError: java.awt.image.BufferedImage
java.lang.NoClassDefFoundError: java.awt.image.BufferedImage
你看好了,我文章是放在j2ee下,不是放在android下的.....android下没BufferedImage这个类
6 楼
qinyonghui
2012-05-04
你好,你能够贴上解析一/二维码的代码吗,我现在要通过这些一二维码的图片来解析他们里面的内容,谢谢,qinyonghui20@qq.com
7 楼
zbhcit
2012-08-29
你好,请教一下android如何解析二维码图片,不是通过扫描,我做了一个例子,有些可以解析,有些会报com.google.zxing.FormatException,不知道楼主有么接触过???
8 楼
xiuxiu123
2012-09-10
请问大神们 识别效率改如何解决,有些识别需要花费很长时间的?