【问题标题】:Barcode i25 using ItextSharp条码 i25 使用 ItextSharp
【发布时间】:2015-04-17 02:24:12
【问题描述】:

我正在使用 BarcodeInter25 类制作条形码。我能够做到,但它只是模糊了它怎么能变得更清晰? 它的背景白色也不完全是白色 我的代码:

               BarcodeInter25 code25 = new BarcodeInter25();
               Rectangle r = new iTextSharp.text.Rectangle(38, 152);
               code25.ChecksumText = false;
               code25.Code = "some digits";
               code25.BarHeight = 2
               System.Drawing.Image i = code25.CreateDrawingImage(System.Drawing.Color.Black, System.Drawing.Color.White);

               MemoryStream ms = new MemoryStream();
               i.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
               Image img = Image.GetInstance(ms.ToArray());
               ms.Dispose();

【问题讨论】:

  • 您使用的是有损图像格式 (JPEG)。模糊是意料之中的。
  • 我已经更新了我的答案,解释了如何确保不显示任何文本(您在问题中省略的要求)。没有理由将条形码添加为光栅图像。正如@Phylogenesis 所指出的那样:您不应该使用有损图像格式,尤其是如果有一种方法可以使用更少的代码行来创建矢量图像。

标签: c# itextsharp


【解决方案1】:

查看您的代码,条形码模糊的原因应该很明显。您将其转换为System.Drawing.Image(使其成为光栅图像),然后将其转换为iTextSharp.text.Image(但此时图像已经模糊)。

实现您想要的正确方法是直接从条形码创建一个iTextSharp.text.Image(不要通过System.Drawing.Image)。可以这样做:

BarcodeInter25 code25 = new BarcodeInter25();
Rectangle r = new iTextSharp.text.Rectangle(38, 152);
code25.ChecksumText = false;
code25.Code = "some digits";
code25.BarHeight = 2;
PdfContentByte cb = writer.DirectContent;
Image img = code25.CreateImageWithBarcode(cb, null, null);

现在Image 对象将不再是光栅图像(带有使线条模糊的像素),而是真正的矢量图像(没有像素,但有诸如 moveTo()lineTo()stroke())。矢量数据的优势在于它与分辨率无关:您可以随意放大和缩小,它总是很清晰。

这在Chapter 10 of my book 中进行了解释,您可以在其中找到Barcodes 示例。在该章中,您还将发现setFont()(或在iTextSharp 中的Font 属性)。我引用 API 文档:

public void setFont(BaseFont font)

设置文本字体。

参数:

font - 文本字体。设置为null 以隐藏任何文本

所以如果不想看到任何文字,可以在上面的代码sn-p中加入下面一行:

code25.Font = null;

【讨论】:

  • CreateImageWithBarcode 这个方法也可以添加文本但我不需要它,这就是我尝试那个的原因
  • 如果您想节省时间,请阅读文档。通过将字体设置为null,可以删除条码的文本。
【解决方案2】:

您应该避免以任何方式调整大小。输出很可能是像素完美的,但是当您放大/缩小它时,双线性过滤器会使其平滑,使其变得模糊。

我通过在 PDF 中嵌入二维码并通过避免调整大小来解决了同样的问题。

如果您确实需要不同的大小,请使用正确的interpolation algorithm 以编程方式在代码中应用它。

【讨论】:

  • 那么它是如何实现的,你能给我示例代码吗??
  • Bruno 似乎为您提供了一个可行的解决方案。你应该试试:)
  • 是的,他帮了我很多忙
猜你喜欢
  • 1970-01-01
  • 2011-10-28
  • 2018-02-22
  • 2013-07-03
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多