C# 调用 zxing.dll 生成条码二维码,自定义条码大小颜色透明度,旋转角度
输出效果

string txt = tNode.InnerText;
if (txt.Equals("")) return;
float x = 0, y = 0, x1 = 0, y1 = 0;
if (tNode.Attributes["x"] != null)
float.TryParse(tNode.Attributes["x"].Value, out x);
if (tNode.Attributes["y"] != null)
float.TryParse(tNode.Attributes["y"].Value, out y);
if (tNode.Attributes["x1"] != null)
float.TryParse(tNode.Attributes["x1"].Value, out x1);
if (tNode.Attributes["y1"] != null)
float.TryParse(tNode.Attributes["y1"].Value, out y1);
float width = MmToPixel(x1 - x), height = MmToPixel(y1 - y);
float angle = 0, alpha = 1;
if (tNode.Attributes["Rotate"] != null)
float.TryParse(tNode.Attributes["Rotate"].Value, out angle);
if (tNode.Attributes["Alpha"] != null)
float.TryParse(tNode.Attributes["Alpha"].Value, out alpha);
string bcType = "";
if (tNode.Attributes["Type"] != null)
bcType = tNode.Attributes["Type"].Value;
if (bcType.Equals("") && width == height) bcType = "QR_CODE";
BarcodeFormat bcf = BarcodeFormat.CODE_128;
foreach (var bn in Enum.GetValues(typeof(BarcodeFormat)))
{
if (bn.ToString().Equals(bcType, StringComparison.OrdinalIgnoreCase))
bcf = (BarcodeFormat)bn.GetHashCode();
}
var bcWriter = new BarcodeWriter();
bcWriter.Format = bcf;
if (bcWriter.Format == BarcodeFormat.QR_CODE)
{
QrCodeEncodingOptions opt2 = new QrCodeEncodingOptions();
opt2.Width = (int)width;
opt2.Height = (int)height;
opt2.NoPadding = true;
float qrv = 3;
if (txt.Length > 42) qrv = 7;
if (tNode.Attributes["QrVersion"] != null)
float.TryParse(tNode.Attributes["QrVersion"].Value, out qrv);
opt2.QrVersion = (int)qrv;
opt2.CharacterSet = "utf-8";
string ecl = "H";
if (tNode.Attributes["QrLevel"] != null)
ecl = tNode.Attributes["QrLevel"].Value.ToUpper().Trim();
ZXing.QrCode.Internal.ErrorCorrectionLevel lvl = ZXing.QrCode.Internal.ErrorCorrectionLevel.H;
switch (ecl)
{
case "L":
lvl = ZXing.QrCode.Internal.ErrorCorrectionLevel.L;
break;
case "M":
lvl = ZXing.QrCode.Internal.ErrorCorrectionLevel.M;
break;
case "Q":
lvl = ZXing.QrCode.Internal.ErrorCorrectionLevel.Q;
break;
}
opt2.ErrorCorrection = lvl;
bcWriter.Options = opt2;
}
else
{
EncodingOptions opt = new EncodingOptions();
opt.Width = (int)width;
opt.Height = (int)height;
opt.NoPadding = true;
if (tNode.Attributes["PureBarcode"] != null &&
(tNode.Attributes["PureBarcode"].Value.Equals("1") || tNode.Attributes["PureBarcode"].Value.Equals("true", StringComparison.OrdinalIgnoreCase)))
opt.PureBarcode = true;
bcWriter.Options = opt;
}
var qrImg = bcWriter.Write(txt);
ImageAttributes imgAttr = new ImageAttributes();
// 设置透明度矩阵
ColorMatrix cm = new ColorMatrix();
cm.Matrix33 = alpha; // 设置透明度为50%
imgAttr.SetColorMatrix(cm);
List<ColorMap> cmList = new List<ColorMap>();
//条码颜色
if (tNode.Attributes["Color"] != null &&
!String.IsNullOrEmpty(tNode.Attributes["Color"].Value))
{
Color color = ColorTranslator.FromHtml(tNode.Attributes["Color"].Value);
cmList.Add(new ColorMap()
{
OldColor = Color.Black,
NewColor = color
});
}
//背景颜色
if (tNode.Attributes["BgColor"] != null &&
!String.IsNullOrEmpty(tNode.Attributes["BgColor"].Value))
{
Color color = ColorTranslator.FromHtml(tNode.Attributes["BgColor"].Value);
cmList.Add(new ColorMap()
{
OldColor = Color.White,
NewColor = color
});
}
else
{
cmList.Add(new ColorMap()
{
OldColor = Color.White,
NewColor = Color.Transparent
});
}
imgAttr.SetRemapTable(cmList.ToArray());
if (angle != 0)
{
g.TranslateTransform(MmToPixel(x) + width / 2, MmToPixel(y) + height / 2);
g.RotateTransform(angle);
Rectangle rf = new Rectangle((int)-width / 2, (int)-height / 2, (int)width, (int)height);
g.DrawImage(qrImg, rf, 0, 0, qrImg.Width,qrImg.Height, GraphicsUnit.Pixel, imgAttr);
g.ResetTransform();
}
else
{
Rectangle rf = new Rectangle(MmToPixel(x), MmToPixel(y), (int)width, (int)height);
g.DrawImage(qrImg, rf, 0, 0, qrImg.Width, qrImg.Height, GraphicsUnit.Pixel, imgAttr);
}
qrImg.Dispose();
本文介绍了如何使用C#结合zxing.dll库,实现条码和二维码的生成,并详细讲解了如何设置条码和二维码的尺寸、颜色、透明度以及旋转角度,以达到理想的输出效果。
1906

被折叠的 条评论
为什么被折叠?



