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

2023-12-09

好吧,所以我要打消这里有人以前使用过 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

显然,文本正在被编码,但数据的实际字节完全消失。任何帮助将不胜感激。


因此,对于那些不想花两天时间在互联网上搜索来解决这个问题的人来说,当您将字节数组编码为二维码时,您必须使用ISO-8859-1字符集,不UTF-8.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用zxing进行QR码编码和解码 的相关文章

随机推荐

  • R:从循环中打印单独的迭代?

    我正在使用 R 编程语言 通常 我从循环中打印迭代 这有助于我跟踪事情 例如 my list list for i in 1 1000 tryCatch frame i rnorm 1 1 1 my list i frame i ifels
  • 为什么有些 Docker 镜像没有定义 VOLUME?

    我刚刚开始接触 Docker 如果我的问题对你来说太傻了 请原谅我 我看到一些图像 例如nginx 没有任何VOLUME定义而有些图像像mysql has VOLUME在他们的 Dockerfile 中定义 当没有定义卷时如何管理数据或文件
  • 在symfony2中引用静态模板

    我想将 Angular 与 symfony2 一起使用 为此 应该可以从像这样的引用加载模板 div div 载荷是角度的部分 我们只需提供模板的路径即可 模板不应该用树枝渲染 这可以用 symfony 实现吗 简单地制作一个没有树枝标签的
  • PDF 中的统一码

    我的程序根据要求生成相对简单的 PDF 文档 但我在处理 unicode 字符 如汉字或奇怪的数学符号 时遇到问题 要在 PDF 中写入普通字符串 请将其放在括号中 something 还可以选择使用八进制代码转义字符 527 但这最多只能
  • 使用PHP代码从多维数组获取数据

    我正在尝试获取这些数据 label gt For Rent来自多维数组 这是我的数组 Array listing id gt 0 fields gt Array 1 gt Property House 7 2 gt 30 4 gt sdfa
  • 停止预定的 JavaScript 执行

    我有一个函数 在其中定义了很多 setTimeout 函数 当用户按下按钮时 它就开始执行 我怎样才能取消它 有什么方法可以取消所有超时 假设我有多个没有名字的超时 start timer var timer setTimeout canc
  • Expressjs+socket.io+express-session

    我的 server js 中有这段代码 var app require express session require express session cookie require cookie cookieParser require c
  • 本体中实体的排序

    我有一个系统 可以在本体 通常的三重存储 中对一些领域数据进行建模 我一直在寻找一种表达复数和排序的方法 但没有通过谷歌找到任何东西 我的主要用例是 域中的一个实体可以是一系列任务 买杂货 做饭 吃饭等 但总的来说 我觉得有能力 衡量 你的
  • 此 python 代码是否使用深度优先搜索 (DFS) 来查找所有路径?

    这段代码给出在python图论官方论文 这是代码 def find all paths graph start end path path path start if start end return path if not graph h
  • rake db:migrate (mysql) [重复]

    这个问题在这里已经有答案了 可能的重复 库未加载 尝试使用 mysql2 gem 在 OS X 10 6 上运行 rails server 时出现 libmysqlclient 16 dylib 错误 为什么我收到这个错误 什么意思 我已经
  • 如何获得数组中高于某个数字的最小值?

    我有一个像这样的数组 5229561 gt 8 5229582 gt 9 5229583 gt 10 5229584 gt 11 如果数组已排序并且键是连续的 例如 100 101 102 没有 78 5 13 则可以使用二分搜索 总的来说
  • 如何以另一种形式调用PHP中的函数?

    我有一个带有名字的页面1 php里面有一个功能 现在我想调用该函数2 php在 PHP 2 中 我写了func 这个函数在1 php 但它有这个错误 Fatal error Call to undefined function func i
  • 如何以编程方式在 Selenium Jupiter 的基类中配置 WebDriver?

    我想将基于 JUnit 4 的现有 Selenium 测试迁移到 JUnit 5 为此 我想利用硒 木星 测试必须满足的一项要求是 能够在运行时切换 WebDriver 实现 基于执行环境 使用所有测试的一个公共基类 在开发人员计算机 Wi
  • Eclipselink 支持包含正则表达式的查询吗?

    我已经看到像 MySQL 这样的 DBMS 支持包含正则表达式的查询 Eclipselink 支持这个吗 我必须检索具有与某些正则表达式匹配的某些字符串属性的实体 SELECT X FROM Person X WHERE X name
  • Phoenix.ActionClauseError at POST,没有匹配的操作子句来处理请求

    每当我发布到 api subastas 时 我都会收到此错误 Phoenix ActionClauseError at POST api subastas bad request to IascSubastas SubastaControl
  • 将 Python 列表和字典理解与计数器结合起来

    我想传输元组列表 1 3 5 2 4 6 7 8 9 到一个列表dict 为了创建一个 pandas 数据框 如下所示 index 1 match 1 index 1 match 3 index 1 match 5 index 2 matc
  • Android上从网页启动流媒体音频播放器的方法

    要链接到 SHOUTcast HTTP 互联网广播流 传统上您会链接到播放列表文件 例如 M3U 或 PLS 从那里 浏览器将启动注册来处理播放列表的音频播放器 这适用于任何 PC Palm Blackberry 和 iPhone 这个方法
  • 如何在对数图中设置双轴刻度

    在我的图中 辅助 x 轴用于显示某些数据的另一个变量的值 现在 原始轴已按对数缩放 不幸的是 孪生轴将刻度 和标签 放置在原始轴的线性刻度上 而不是按照对数刻度 如何克服这个问题 这里的代码示例应该将孪生轴的刻度放在与原始轴相同的 绝对轴
  • 如何使 scanf 有选择地忽略其转换说明符之一?

    char value1 10 int value2 int value3 0 if scanf s d d value1 0 value2 value3 scanf s d value1 0 value2 我正在尝试使用scanf插入 3
  • 使用zxing进行QR码编码和解码

    好吧 所以我要打消这里有人以前使用过 zxing 的可能性 我正在开发一个Java应用程序 它需要做的一件事是将数据的字节数组编码为QR码 然后稍后对其进行解码 这是我的编码器的示例 byte b 0x48 0x45 0x4C 0x4C 0