在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"));
}
}
下面是生成的两个图片:
[img]http://dl.iteye.com/upload/attachment/563366/9740e4e7-4189-335f-8f0e-d26b10667442.png[/img]
[img]http://dl.iteye.com/upload/attachment/563368/29d0cc73-a87a-3a2a-8658-7af85c7bd96d.png[/img]