如何在 .Net Core 2.0 中使用 ZXing.Net 和 ImageSharp 创建条码图像
Posted
技术标签:
【中文标题】如何在 .Net Core 2.0 中使用 ZXing.Net 和 ImageSharp 创建条码图像【英文标题】:How to create barcode image with ZXing.Net and ImageSharp in .Net Core 2.0 【发布时间】:2018-05-28 10:10:16 【问题描述】:我正在尝试生成条形码图像。当我使用以下代码时,我可以创建一个 base64
字符串,但它给出了一个空白图像。我检查了内容不是空白或空白。
有些代码使用CoreCompat.System.Drawing
,但我无法使其工作,因为我在 OS X 环境中工作。
我做错了吗?
代码:
[htmlTargetElement("barcode")]
public class BarcodeHelper: TagHelper
public override void Process(TagHelperContext context, TagHelperOutput output)
var content = context.AllAttributes["content"].Value.ToString();
var alt = context.AllAttributes["alt"].Value.ToString();
var width = 250;
var height = 250;
var margin = 0;
var barcodeWriter = new ZXing.BarcodeWriterPixelData
Format = ZXing.BarcodeFormat.CODE_128,
Options = new QrCodeEncodingOptions
Height = height, Width = width, Margin = margin
;
var pixelData = barcodeWriter.Write(content);
using (var image = Image.LoadPixelData<Rgba32>(pixelData.Pixels, width, height))
output.TagName = "img";
output.Attributes.Clear();
output.Attributes.Add("width", width);
output.Attributes.Add("height", height);
output.Attributes.Add("alt", alt);
output.Attributes.Add("src", string.Format("data:image/png;base64,0", image.ToBase64String(ImageFormats.Png)));
下面有一些代码 sn-ps。他们可以编写内容并将结果数据轻松转换为base64
字符串。但是当我调用BarcodeWriter
时,它需要一个类型<TOutput>
,我不知道该发送什么。我正在使用ZXing.Net
0.16.2。
var writer = BarcodeWriter // BarcodeWriter without <TOutput> is missing. There is BarcodeWriter<TOutput> I can call.
Format = BarcodeFormat.CODE_128
var result = writer.write("content");
【问题讨论】:
【参考方案1】:像素数据渲染器的当前版本 (0.16.2) 使用了错误的 Alpha 通道值。整个条码是透明的。
此外,对于我的 ImageSharp 版本,我必须删除以下部分 "data:image/png;base64,0",
,因为 image.ToBase64String
已经包含此部分。
完整修改代码:
[HtmlTargetElement("barcode")]
public class BarcodeHelper: TagHelper
public override void Process(TagHelperContext context, TagHelperOutput output)
var content = context.AllAttributes["content"].Value.ToString();
var alt = context.AllAttributes["alt"].Value.ToString();
var width = 250;
var height = 250;
var margin = 0;
var barcodeWriter = new ZXing.BarcodeWriterPixelData
Format = ZXing.BarcodeFormat.CODE_128,
Options = new EncodingOptions
Height = height, Width = width, Margin = margin
,
Renderer = new PixelDataRenderer
Foreground = new PixelDataRenderer.Color(unchecked((int)0xFF000000)),
Background = new PixelDataRenderer.Color(unchecked((int)0xFFFFFFFF)),
;
var pixelData = barcodeWriter.Write(content);
using (var image = Image.LoadPixelData<Rgba32>(pixelData.Pixels, width, height))
output.TagName = "img";
output.Attributes.Clear();
output.Attributes.Add("width", pixelData.Width);
output.Attributes.Add("height", pixelData.Height);
output.Attributes.Add("alt", alt);
output.Attributes.Add("src", string.Format( image.ToBase64String(ImageFormats.Png)));
也可以使用 ImageSharp 绑定包 (ZXing.Net.Bindings.ImageSharp)。
[HtmlTargetElement("barcode")]
public class BarcodeHelper: TagHelper
public override void Process(TagHelperContext context, TagHelperOutput output)
var content = context.AllAttributes["content"].Value.ToString();
var alt = context.AllAttributes["alt"].Value.ToString();
var width = 250;
var height = 250;
var margin = 0;
var barcodeWriter = new ZXing.ImageSharp.BarcodeWriter<Rgba32>
Format = ZXing.BarcodeFormat.CODE_128,
Options = new EncodingOptions
Height = height, Width = width, Margin = margin
;
using (var image = barcodeWriter.Write(content))
output.TagName = "img";
output.Attributes.Clear();
output.Attributes.Add("width", image.Width);
output.Attributes.Add("height", image.Height);
output.Attributes.Add("alt", alt);
output.Attributes.Add("src", string.Format( image.ToBase64String(ImageFormats.Png)));
【讨论】:
以上是关于如何在 .Net Core 2.0 中使用 ZXing.Net 和 ImageSharp 创建条码图像的主要内容,如果未能解决你的问题,请参考以下文章
如何在新创建的 .NET Core 2.0 Web 应用程序中定位 .NET Standard 2.0?
如何在 net-core 2.0 中手动解析 JSON 字符串
如何使用 Url.Action 在 asp.net core 2.0 razor 页面中传递多个操作
如何在 ASP.NET Core 2.0 中根据路由配置服务身份验证