首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ZXing.Net Core2.0中用ZXing.Net和ImageSharp创建条形码图像

如何在ZXing.Net Core2.0中用ZXing.Net和ImageSharp创建条形码图像
EN

Stack Overflow用户
提问于 2017-12-14 10:39:57
回答 1查看 5K关注 0票数 6

我在试着生成条形码图像。当我使用下面的代码时,我可以创建一个base64字符串,但它提供了一个空白图像。我检查了内容不是空白或空白。

有使用CoreCompat.System.Drawing的代码,但我无法使它工作,因为我是在OS环境中工作。

我做错了什么吗?

代码:

代码语言:javascript
复制
  [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))); 
          }
      } 
  } 

下面有一些代码片段。它们可以编写内容并轻松地将结果数据转换为base64字符串。但是当我调用BarcodeWriter时,它需要一个类型的<TOutput>,我不知道该发送什么。我使用的是ZXing.Net 0.16.2。

代码语言:javascript
复制
          var writer = BarcodeWriter // BarcodeWriter without <TOutput> is missing. There is BarcodeWriter<TOutput> I can call.
          {
              Format = BarcodeFormat.CODE_128 
          }

          var result = writer.write("content");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-15 08:24:14

像素数据呈现器的当前版本(0.16.2)使用错误的alpha通道值。整个条形码都是透明的。此外,在我的ImageSharp版本中,我不得不删除下面的部分,"data:image/png;base64,{0}",,因为image.ToBase64String已经包含了这个部分。

完整的修改代码:

代码语言:javascript
复制
  [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)。

代码语言:javascript
复制
  [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))); 
          }
      } 
  } 
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47811335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档