闽公网安备 35020302035485号

于是我尝试了一下,修改了不同的ECL,对应输出的图案都是不同的,但还是没有生成我想要的图案。难道是我的陈年OnBarcode类库跟不上时代了?于是我换成了QRCoder,又是一通折腾,还是没对上。再是找了一些在线生成二维码网站(见下方链接),逐个比较,发现还真是五花八门,有些是不提供设置直接生成,有些是可修改版本及ECL的,最后结果都不太一样,幸好有些网站生成的图片是对上了的,总算有条退路。
static void ParseQRCode(string imagePath, out string data, out IDictionary<ResultMetadataType, object> hints)
{
hints = null;
BarcodeReader reader = new BarcodeReader();
reader.Options.PossibleFormats = new List<BarcodeFormat> { BarcodeFormat.QR_CODE };//可加可不加
Bitmap bitmap = new Bitmap(imagePath);
Result result = reader.Decode(bitmap);
if (result != null)
{
data = result.Text;
hints = result.ResultMetadata;
}
else
{
data = null;
}
}
输入图片路径,找了一下result的属性,果然在ResultMetadata里面存放着我要的信息:
public static Bitmap CreateQRCode(string data)
{
Bitmap bitmap = null;
GC.Collect();
BarcodeWriter barCodeWriter = new BarcodeWriter();
barCodeWriter.Format = BarcodeFormat.QR_CODE; // 生成码的方式(这里设置的是二维码),有条形码\二维码\还有中间嵌入图片的二维码等
//barCodeWriter.Options.Hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");// 支持中文字符串
barCodeWriter.Options.Hints.Add(EncodeHintType.ERROR_CORRECTION, ZXing.QrCode.Internal.ErrorCorrectionLevel.H);
barCodeWriter.Options.Hints.Add(EncodeHintType.QR_MASK_PATTERN, 2);
barCodeWriter.Options.Height = 200;
barCodeWriter.Options.Width = 200;
barCodeWriter.Options.Margin = 0; //设置的白边大小
ZXing.Common.BitMatrix bm = barCodeWriter.Encode(data);
bitmap = barCodeWriter.Write(bm);
return bitmap;
}
果然,结果跟原图一样(外面的圈是我自己加的):