0

我创建了一个空白的 png图像并在其中插入了一些对象。像文字标志条形码图像。现在我遇到了条形码图像的问题。

当我在空白 png 中插入条形码图像时

我打开了最终图像,我发现带有条码条的灰线显示。(当您将图像放大 4 倍或更多倍时,您可以看到灰线)。以下是您可以查看或下载的 final-image.png..在此处输入图像描述

我查看了我的条形码图像,没有灰线。(您可以看到没有灰线的多次缩放)。以下是您可以查看或下载的barcode.png图像。在此处输入图像描述

我无法用扫描仪扫描条形码,因为灰线会显示新图像。

我使用 zxing 库创建了条形码图像,并使用以下代码在最终图像中插入。

   ZXBitMatrix* result = [writer encode:@"B51554" format:kBarcodeFormatCode39 width:232 height:54 error:&error];
   CGImageRef imageRef = CGImageRetain([[ZXImage imageWithMatrix:result] cgimage]);
   UIImage* uiImage = [[UIImage alloc] initWithCGImage:imageRef];
   [uiImage drawInRect:CGRectMake(14, 168, 116, 27) blendMode:kCGBlendModeNormal alpha:1.0];

请建议有什么办法在插入条形码图像时我没有损失质量或我没有在最终图像内得到灰线。感谢帮助

4

1 回答 1

0

您看到的效果称为抗锯齿

在您的原始图像中,条形图与像素完美对齐。它们的宽度为 2 或 4 像素。总体而言,图像为 232 像素宽(包括左侧和右侧的一些空白区域)。

在组合图像(包括文本和徽标)中,条形码约为 300 像素宽。这导致比例因子约为 1.4。不再可能将条与像素正确对齐,因为它们大约为 2.7 和 5.5 像素宽。所以抗锯齿开始了。当图像被缩放时,只有部分被条覆盖的像素变成灰色。对于人眼来说,这保留了规则间隔条的视觉印象。

对于条码阅读器来说,抗锯齿通常不是问题。由于您声明无法扫描条形码,因此表明您正在以图像分辨率的下限工作。

最好的选择可能是大大提高图像的分辨率。我不知道这在你的具体情况下是否可行。如果图像随后显示在低分辨率显示器上,那将没有多大意义。

下一个最佳选择是确保缩放图像以使其与像素完美对齐,即使用 1、1.5 或 2 的比例因子并将其放置在整数值的位置。

仅仅关闭抗锯齿并仍然使用小数比例因子很可能不起作用。条将与像素对齐,但它们的宽度会发生变化。它们不是 2 和 4 像素宽(或 3 和 6 像素),而是 1 和 3 或 3 和 5 像素宽,这对扫描仪来说也是一个问题。

于 2021-09-06T14:32:58.277 回答