使用zxing进行QR码编码和解码

好的,所以我要把握机会,这里的某个人以前使用过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

以上是 使用zxing进行QR码编码和解码 的全部内容, 来源链接: utcz.com/qa/428364.html

回到顶部