2017-12-14 36 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

자세한 내용은 Micheal에게 문의 해 주셔서 감사합니다. –