java – QR码使用zxing编码和解码

好吧,所以我要拿出机会,有人在这里已经使用zxing之前。我正在开发一个Java应用程序,它需要做的事情之一是将一个字节数组数据编码为QR码,然后在以后解码。

这里是我的编码器看起来像一个例子:

byte[] b = {0x48, 0x45, 0x4C, 0x4C, 0x4F};
//convert the byte array into a UTF-8 string
String data;
try {
    data = new String(b, "UTF8");
}
catch (UnsupportedEncodingException e) {
 //the program shouldn't be able to get here
 return;
}

//get a byte matrix for the data
ByteMatrix matrix;
com.google.zxing.Writer writer = new QRCodeWriter();
try {
 matrix = writer.encode(data, com.google.zxing.BarcodeFormat.QR_CODE, width, height);
}
catch (com.google.zxing.WriterException e) {
 //exit the method
 return;
}

//generate an image from the byte matrix
int width = matrix.getWidth(); 
int height = matrix.getHeight(); 

byte[][] array = matrix.getArray();

//create buffered image to draw to
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

//iterate through the matrix and draw the pixels to the image
for (int y = 0; y < height; y++) { 
 for (int x = 0; x < width; x++) { 
  int grayValue = array[y][x] & 0xff; 
  image.setRGB(x, y, (grayValue == 0 ? 0 : 0xFFFFFF));
 }
}

//write the image to the output stream
ImageIO.write(image, "png", outputStream);

这个代码中的开始字节数组只是用来测试它。实际的字节数据将被改变。

这里是我的解码器看起来像:

//get the data from the input stream
BufferedImage image = ImageIO.read(inputStream);

//convert the image to a binary bitmap source
LuminanceSource source = new BufferedImageLuminanceSource(image);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));

//decode the barcode
QRCodeReader reader = new QRCodeReader();

Result result;
try {
 result = reader.decode(bitmap, hints);
} catch (ReaderException e) {
 //the data is improperly formatted
 throw new MCCDatabaseMismatchException();
}

byte[] b = result.getRawBytes();
System.out.println(ByteHelper.convertUnsignedBytesToHexString(result.getText().getBytes("UTF8")));
System.out.println(ByteHelper.convertUnsignedBytesToHexString(b));

convertUnsignedBytesToHexString(byte)是一种转换十六进制字符串中的字节数组的方法。

当我试图运行这两个代码块在一起,这是输出:

48454c4c4f
202b0b78cc00ec11ec11ec11ec11ec11ec11ec

显然,文本正在被编码,但是数据的实际字节完全关闭。任何帮助将在这里感谢。

所以,对于任何人谁不想花两天时间搜索互联网来弄清楚这一点,将字节数组编码为QR码时,您必须使用ISO-8859-1字符集,而不是UTF-8,以备将来参考。
http://stackoverflow.com/questions/2489048/qr-code-encoding-and-decoding-using-zxing

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – QR码使用zxing编码和解码