zxing - Zxing web 使用 base64 填充对 Aztec 代码进行解码,但 3.4.0 jar 没有找到条码
问题描述
运行最新的 java 版本会在图像上产生“未找到条形码”。
java -cp core-3.4.0.jar:javase-3.4.0.jar:jcommander-1.72.jar:jai-imageio-core-1.4.0.jar com.google.zxing.client.j2se.CommandLineRunner --try_harder ./IMG.jpg file:///home/tom/Projects/mTicketing/zxing_java/./IMG.jpg:找不到条形码
但是,使用网站https://zxing.org/w/decode和相同的图像会产生:
eyJ2ZXJzaW9uIjoidGZpLjEiLCJhbGciOiJSUzI1NiIsImFjdCI6IjIwMjAtMDQtMjhUMDc6NTc6NDYrMDE6MDAifQ==.eyJkdXIiOiJQVDkwTSIsIm9wIjoiQnVzIEVpcmVhbm4iLCJwciI6IlNpbmdsZSBKb3VybmV5IFRpY2tldCBBZHVsdCIsImZyb20iOiJDbGFyZWNhc3RsZSIsInRvIjoiU2hhbm5vbiBJbmR1c3RyaWFsIEVzdC4iLCJybiI6IjExMjE5IiwiYW4iOiJUb20gQnlybmUiLCJ1dG4iOiI2OTE2NDQzOC02M2RkLTRhY2YtOGZlNS01MjUyMjZmYjhmOTcifQ.Aw_3tELIvR6EqatwR-QxwXC5V1F7Cznr0FfZkl8O8SIYzwcOyJ_coCqBs_2UKMghv0WVNAXikHmavMqLLEaug2H41ElFs48lBz8yEgsCsrbeau2AWDd14KixsfITx3rps9HqMf-aPxb5B3Dw6vYFh2Gnokb1Dhbqfhb1a5j5UJI
但是,如果从 JWT 令牌 ('==') 的标头中删除 base64 填充并生成 QR 码,则站点和 java 代码都成功地解码了条形码。
我知道应该使用 Base64Url 但为什么 zxing 站点成功解码了图像而不是最新的 jar 文件?
为什么填充会产生难以解码的图像?
解决方案
因此,经过更多研究,我很确定我注意到的问题与编码数据的长度和显示 Aztec 代码的设备的分辨率有关,而与填充无关。
随着编码数据长度的增加,Aztec QR 码的视觉复杂性也会增加。我发现,如果我使用分辨率较低的设备或故意将设备的屏幕分辨率设置为低,则无法可靠地解码更复杂的代码。
ZXING 站点和 java 代码之间存在一些差异,但我怀疑该站点可能预先配置了一组解码提示。
推荐阅读
- scala - 在我的窗口中满足某个条件之前,我如何窗口化?
- c++ - 在 C++ 类中使用大数组
- fluid-dynamics - 在 COMSOL Multiphysics 中添加布朗力时出现警告
- python - 如何根据 Select 小部件中的选定值更新 Bokeh 中的图形?
- jenkins - 仅在 Jenkins 上执行测试时出现未知主机异常错误
- excel - 在下一个可见单元格上应用 VLOOKUP
- c++ - 如何管理 QDockWidget 上的布局?
- javascript - JavaScript如何根据嵌套数组中的值查找数组中的唯一值
- anylogic - 条件触发的事件
- node.js - Node.js 上的冒险游戏