首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IMagickImage.Crop()导致图像模糊

IMagickImage.Crop()导致图像模糊
EN

Stack Overflow用户
提问于 2019-08-08 02:42:40
回答 2查看 226关注 0票数 0

我有以下C#代码:

代码语言:javascript
复制
MagickImage pdfPage = MyCodeToGetPage();
String barcodePng = "tmp.png"
MagickGeometry barcodeArea = new MagickGeometry(350, 153, 208, 36);
IMagickImage barcodeImg = pdfPage.Clone();
barcodeImg.Crop(barcodeArea);
barcodeImg.Write(barcodePng);

它创建一个tmp.png文件,该文件显示在下面的条形码中:

问题是tmp.png文件是模糊的,我的条形码检测逻辑不会检测条形码。您可以看到上面的图像是清晰的,线没有被合并。

标题中说,Crop()是造成问题的原因,但也可能是Write()。

如何在不使tmp.png变得模糊的情况下从pdf中裁剪条形码?

当源文档是.tif时,这不是一个问题。更准确地说,如果我将.pdf转换为.tif,然后对其进行裁剪,.png就足够清晰,可以检测到条形码。我想消除中间.tif,因为它使用笨拙的打印机驱动程序进行转换。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-09 04:12:45

如你在以下答复中所要求的:

增加阅读的密度是我第一次在我对你问题的评论中建议的。它增加了输入的光栅化版本的大小。就像在更高的密度下进行扫描。我在ImageMagick中通常做的是以4倍的名义密度读取pdf,也就是4x72=288,然后缩小1/4=25%。这通常会给你的结果提供一个更好的质量。因此,我在命令行ImageMagick中使用的命令是:

代码语言:javascript
复制
convert -density 288 input.pdf -resize 25% result.suffix

我还要补充一点,Ghostscript无法处理具有透明度的CMYK PDF。因此,在读取pdf文件之前,必须将颜色空间更改为sRGB。因此,在这种情况下,应该是:

代码语言:javascript
复制
convert -density 288 -colorspace sRGB input.pdf -resize 25% result.suffix

对不起,我没有编码C++,所以我可能误解了,但我不明白为什么在阅读TIFF之前增加密度会产生任何不同。

票数 1
EN

Stack Overflow用户

发布于 2019-08-09 04:01:54

这个网址有答案:http://www.jiajianhudong.com/question/642668.html

为了修复它,我将代码更改为:

代码语言:javascript
复制
MagickImage pdfPage = MyCodeToGetPage();
String barcodePng = "tmp.png"
MagickGeometry barcodeArea = new MagickGeometry(350, 153, 208, 36);
IMagickImage barcodeImg = pdfPage.Clone();
barcodeImg.ColorType = ColorType.Bilevel;
barcodeImg.Depth = 1;
barcodeImg.Alpha(AlphaOption.Off);
barcodeImg.Crop(barcodeArea);
barcodeImg.Write(barcodePng);

而修复的最关键部分是改变:

代码语言:javascript
复制
using (MagickImageCollection tiffPageCollection = new MagickImageCollection())
{
    tiffPageCollection.Read(tifName);

代码语言:javascript
复制
var settings = new MagickReadSettings { Density = new Density(200) };

using (MagickImageCollection tiffPageCollection = new MagickImageCollection())
{
    tiffPageCollection.Read(tifName, settings);

如果有人想要复制我的答案,并添加一个明确的理由,为什么增加密度的阅读修复问题,我会给他们答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57404501

复制
相关文章

相似问题

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