pdf> png> pdf后文本pdf的质量下降

时间:2012-11-07 20:59:09

标签: pdf imagemagick ghostscript fax imagemagick-convert

我有一个非常具体的要求,我必须自动标记PDF文件的每一页(用于传真应用程序),所以这是我所做的过程:

第三步的输出文件“理论上”与步骤1中的输入文件相同(加上上面的标记),但事实并非如此,文件模糊不清,传真后变为人类不可更改因为模糊的像素不会通过传真线,即使你看到input.pdf和output.pdf之间没有区别,尝试放大,你会发现文本字符的边缘是模糊的。

输入(步骤1)或输出(步骤3)的最佳参数是什么?

谢谢!

2 个答案:

答案 0 :(得分:5)

您正在使用消除锯齿(TextAlphaBits = 4)。这个'平滑'通过在文本边缘的黑色像素之间引入灰色像素来实现文本的边缘。在低分辨率(例如显示器)下,这可以防止“锯齿状”。在文本中,并提供更可读的结果。在更高的分辨率下,它的价值是值得商榷的。

传真是1位单色媒体,因此必须通过抖动重新创建灰度值。正如您所发现的,在有限分辨率的设备中这不是一个好主意,因为它会导致锐度的损失。

我相信如果删除-dTextAlphaBits = 4,您会立即看到改进。我还建议您删除GraphicsAlphaBits,因为这会对线条工作产生相同的影响。

如果你认为你仍然需要抗锯齿,你可以尝试降低攻击性,你可以将它设置为4,尝试将其降低到2。

关于其他意见; Kurt是非常正确的,就像fourat一样,我害怕MarcB错了,-r400设置渲染的分辨率,以每英寸点数为单位。如果只给出一个数字,则它用于x和y分辨率。可以使用Ghostscript生成固定大小的栅格,但是使用带-sPAPERSIZE开关的-dFIXEDMEDIA或自动设置FIXEDMEDIA的-g开关。

虽然我同意yms和Kurt将PDF转换为位图格式(PNG)然后返回PDF 导致质量下降,如果最终PDF仅用于通过传真传输,这没关系。 PDF必须在过程中的某个时刻呈现为传真分辨率位图,如果在应用标记之前完成,则不是一个大问题。

我不同意BitBank,将矢量表示转换为位图意味着以特定分辨率对其进行光栅化。一旦完成,所得到的图像不能在不损失质量的情况下重新缩放,而原始矢量表示可以是简单地以不同的分辨率再次渲染。 PDF中的图像是指位图,您不能使用矢量位图。 yms发布的图像清楚地显示了将矢量表示渲染到图像中的效果。

最后一个警告。我不熟悉这里使用的其他工具,但是其中两个命令行至少暗示“调整大小”。如果你调整大小'一个位图然后很可能该工具将引入你遇到问题的相同类型的人工制品(抗锯齿)。一旦你创建了位图,就不应该改变它。重要的是,首先要以正确的大小创建PNG。

最后......

我刚检查了您的原始PDF文件,我发现该页面的内容已经一张图片。不仅仅是它的DCT(JPEG)图像。对于单色图像,JPEG是一种非常糟糕的格式选择。它是一种有损压缩格式,总是将人工制品引入图像中。如果您在Acrobat(或类似的查看器)中打开原始PDF文件并放大,您可以看到有微弱的光晕'在文本周围,您还会看到文本已经模糊。

然后渲染图像,很可能与原始图像分辨率的分辨率不同,同时通过设置-dGraphicsAlphaBits引入更多模糊。然后,您可以对我无法评论的图像数据进行进一步更改。最后,您再次将图像渲染为单色位图。表示灰色像素所需的抖动会导致文本无法读取。

以下是一些改进方法: 1)不要将文本转换成这样的图像,它会立即导致质量损失。 2)不要使用JPEG压缩单色图像 3)如果你要处理图像,不要来回转换它们,使用原件直到你完成,然后从那里制作一个PDF文件,如果你真的必须的话。 4)如果你真的坚持做这一切,不要通过使用更多的抗锯齿来解决问题。从命令行中删除-dGraphicsAlphaBits。您也可以删除-dTextAlphaBits,因为您的文件不包含任何文本。请在使用开关之前阅读文档,并了解它的作用。

您应该在这里考虑您的工作流程。显然,我们不知道你在做什么或为什么,所以可能有充分的理由说明为什么有些事情是不可能的,但你应该尽量避免像这样操纵图像。因为这些不是矢量,所以每次对图像数据进行更改时,您可能会丢失无法在以后恢复的信息。通过进行许多这样的转换(并且您所描绘的工作流程似乎可以执行来自原始图像数据的多达5次转换),您将不可避免地失去质量。

如果可能,将所有内容保留为矢量数据。当不可避免地移动到图像数据时,根据需要创建图像数据以便最终使用,不要进一步转换。

答案 1 :(得分:5)

我仔细查看了您提供的文件,请参阅此处:

zoomed in bitmaps

因此,第一个图像(image_raw),mogrify resize命令的结果,在1062x1375处相当模糊。虽然第二个图像(image_stamped)中的模糊性并没有变得更糟,这是第三方工具的结果,但第三个图像(从output.pdf中提取),即转换命令的结果,更加模糊了是由于图形被调整大小(这是你明确告诉它要做的事情)。

我不知道您的传真程序在哪种分辨率下工作,但仍有更多的质量损失,至少由于24位颜色到黑白转换。

如果您坚持工作流程(即pdf-> png->标记png-> pdf->传真),您应该

    初始光栅化中的
  1. 已经使用了光栅图像在以下所有步骤(包括传真传输)中将具有的每英寸分辨率,

  2. 避免反锯齿和使用alpha位(参见KenS的回答),

  3. 将栅格化图像限制为传真传输可用的颜色空间,即很可能是黑白图像。

  4. PS 正如KenS指出的那样,原始PDF已经只是图像的容器(开始时会有一些模糊)。因此,改进工作流程的另一种方法是提取该图像而不是渲染,以标记原始图像并仅调整其大小(再次没有抗锯齿)传真。

    enter image description here