2017-12-14 137 views
0

バーコードイメージを生成しようとしています。次のコードを使用すると、base64文字列を作成できますが、空白のイメージが表示されます。内容が空白でないか、空白でないかを確認しました。.NET Core 2.0でXZing.NetとImageSharpでバーコードイメージを作成するには

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))); 
      } 
     } 
    } 

以下のようないくつかのコードスニペットがあります。コンテンツを書き込んで、結果データを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)が間違ったアルファチャンネル値を使用しています。バーコード全体が透明です。 また、ImageSharpの私のバージョンでは、"data:image/png;base64,{0}",の部分を削除しなければならなかったので、image.ToBase64Stringにこれが既に含まれています。

完全な変更されたコード:それは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.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))); 
      } 
     } 
    } 

(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))); 
      } 
     } 
    } 
+0

マイケルさんの詳細な回答ありがとうございました。 –

関連する問題