我目前正在开发一个使用 ZXing 生成二维码作为图像的应用程序。这是一个简单的例子:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
public class MyQREncoder {
/**
* @param args
* @throws WriterException
* @throws IOException
* @throws FileNotFoundException
*/
public static void main(String[] args) throws WriterException, FileNotFoundException, IOException {
String text = "Some text to encode";
int width = 300;
int height = 300;
BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE,width,height);
String file = "plop.png";
String format = "png";
MatrixToImageWriter.writeToStream(bitMatrix, format, …Run Code Online (Sandbox Code Playgroud) 我面临着一个我认为不太熟悉的问题(因为在谷歌上搜索,我没有找到任何提示)。我正在尝试使用 TCPDF 提供的类生成 QR 码。几乎一切都工作正常。我能够生成任何类型的网站链接等。
但是,当我尝试为“发送电子邮件”和“Android WiFi 登录”生成 QR 时,但它们没有正确编码(或解码?)。
MATMSG:TO:example@example.com;SUB:Hello;Body:example;;
Run Code Online (Sandbox Code Playgroud)
被解码为
example@example.com;SUB:Hello;Body:example;;
Run Code Online (Sandbox Code Playgroud)
和
WIFI:T:WEP;S:affaf;P:aaaa;;
Run Code Online (Sandbox Code Playgroud)
被解码为
WEP;S:affaf;P:aaaa;;
Run Code Online (Sandbox Code Playgroud)
此外,我注意到编码 MATMSG 是主要问题。我尝试使用这个http://blog.qr4.nl/Online-QR-Code_Decoder.aspx来解码QR。他们无法解码 MATMSG 的 QR
但有趣的是,QR 是从http://www.qrstuff.com/生成的生成的用于发送电子邮件的 QR 在该解码器中运行良好。更有趣的是,如果您只是使用此站点的纯文本选项对 MATMSG 进行编码,则不起作用。
编码 MATMSG 有什么棘手的地方吗?或者你能建议什么来编码吗?
嗯,我应该提一下
matmsg:TO:example@example.com;SUB:Hello;Body:example;;
wifi:T:WEP;S:affaf;P:aaaa;;
Run Code Online (Sandbox Code Playgroud)
得到很好的编码和解码。这些可以用于发送电子邮件和 wifi 登录吗?或者
MATMSG:
TO:example@example.com;SUB:Hello;Body:example;;
WIFI:
T:WEP;S:affaf;P:aaaa;;
Run Code Online (Sandbox Code Playgroud)
这些有用吗?
谢谢你的时间。干杯!
我使用此代码生成我的二维码 ZXing.Net ( http://zxingnet.codeplex.com/ )
IBarcodeWriter writer = new BarcodeWriter { Format = BarcodeFormat.QR_CODE };
qrcode.Source = writer.Write(stringsecure.Text);
Run Code Online (Sandbox Code Playgroud)
但图像非常非常小..
如果可能,如何设置尺寸?
使用下面的代码时我得到了空值。我正在使用从 NuGet 下载的 ZXing dll
using ZXing.Common;
using ZXing.QrCode;
using ZXing.QrCode.Internal;
private void Decode()
{
Bitmap bitmap = new Bitmap(@"D:\Project\QRCodes\myqrcode.png");
try
{
MemoryStream memoryStream = new MemoryStream();
bitmap.Save(memoryStream, ImageFormat.Bmp);
byte[] byteArray = memoryStream.GetBuffer();
ZXing.LuminanceSource source = new RGBLuminanceSource(byteArray, bitmap.Width, bitmap.Height);
var binarizer = new HybridBinarizer(source);
var binBitmap = new BinaryBitmap(binarizer);
QRCodeReader qrCodeReader = new QRCodeReader();
Result str = qrCodeReader.decode(binBitmap);
}
catch{ }
}
Run Code Online (Sandbox Code Playgroud)
请给我一个解决方案 在此先感谢
有一些关于QR 版本 40(177*177 模块)的信息,校正级别为L(7% 错误校正)
版本: 40
纠错级别:L
数据位: 23.648
数字模式: 7089
字母数字模式: 4296
字节模式: 2953
我不知道这些点:
1个模块等于1位吗?
如何计算二维码类型的最大数据位数?例如,为什么我们有 23,648 个数据位?
如何将数据位转换为二维码类型的数字/字母数字?例如,为什么我们有 7,089 个数字和 4,296 个字母数字?
谢谢大家!
我想创建一个包含https://example.com 之类URL 的二维码,当用户扫描它时,如果他们在手机上安装了应用程序,则打开应用程序而不是转到浏览器。那可能吗?我已经查看了应用程序链接和通用链接,但我看不到它是通过二维码或 HTTPS 而不是某些自定义 URL 来触发的。
我正在使用qr_flutter创建 QrImage。没关系,但我想将 QrImage 转换为图像,以便创建一个 PDF 文件以在打印机上打印。请帮助!
QrImage(
data: qrString,
size: 300.0,
version: 10,
backgroundColor: Colors.white,
),
Run Code Online (Sandbox Code Playgroud) 我有一些二进制数据,我想用二维码编码,然后能够解码,所有这些都在 bash 中。搜索后,看起来我应该qrencode用于编码和zbarimg解码。经过一些故障排除后,我仍然无法解码我编码的内容
知道为什么吗?目前我最接近解决方案的是:
$ dd if=/dev/urandom bs=10 count=1 status=none > data.bin
$ xxd data.bin
00000000: b255 f625 1cf7 a051 3d07 .U.%...Q=.
$ cat data.bin | qrencode -l H -8 -o data.png
$ zbarimg --raw --quiet data.png | xxd
00000000: c2b2 55c3 b625 1cc3 b7c2 a051 3d07 0a ..U..%.....Q=..
Run Code Online (Sandbox Code Playgroud)
看起来我不是很远,但仍然有一些东西。
编辑 1:一个可能的解决方法是使用 base64 包装,如@leagris 的回答中所述。
编辑 2:使用 base64 编码使消息的大小加倍。我首先使用二进制文件的原因是为了节省大小,所以我想避免这种情况。不接受@leagris 的答案,因为我希望它是“完整的二进制文件”,抱歉。
编辑 3:截至 2020 年3 月 3 日,这似乎是一个众所周知的问题,zbarimg解决此问题的拉取请求正在进行中:
https://github.com/mchehab/zbar/pull/64
编辑 …
我一直在玩将纯文本放入二维码中。几段似乎不是问题。然而,更长的文本似乎扼杀了系统。
我已经看到大约 300 个字符导致服务器出现问题,但我不确定这是基于什么。
一个二维码可以处理多少个纯文本字符?
我使用 Zbar 和 OpenCV 读取下图中的二维码,但都未能检测到。对于 ZBar,我使用 pyzbar 库作为 python 包装器。有些图像可以正确检测到 QR,有些图像与失败的成功图像非常相似。我的手机摄像头可以读取上传图片中的二维码,这意味着它是有效的。下面是代码片段:
from pyzbar.pyzbar import decode
from pyzbar.pyzbar import ZBarSymbol
import cv2
# zbar
results = decode(cv2.imread(image_path), symbols=[ZBarSymbol.QRCODE])
print(results)
# opencv
qr_decoder = cv2.QRCodeDetector()
data, bbox, rectified_image = qr_decoder.detectAndDecode(cv2.imread(image_path))
print(data, bbox)
Run Code Online (Sandbox Code Playgroud)
什么类型的预处理将有助于提高检测二维码的成功率?