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

zfo*_*fou 1 pdf fax imagemagick ghostscript imagemagick-convert

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

  • 第1步:将PDF转换为PNG,每页一个png文件

    • cmd1:gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE = png16m -dGraphicsAlphaBits = 4 -dTextAlphaBits = 4 -r400 -sOutputFile = image_raw.png input.pdf
    • cmd2:mogrify -resize 31.245%image_raw.png
    • input.pdf(输入):https://www.dropbox.com/s/p2ajqxe99nc0h8m/input.pdf
    • image_raw.png(输出):https://www.dropbox.com/s/4cni4w7mqnmr0t7/image_raw.png
  • 第2步:标记每个PNG文件(使用第三方工具..)

    • image_stamped.png(输出):https://www.dropbox.com/s/3ryiu1m9ndmqik6/image_stamped.png
  • 第3步:将PNG文件重新转换为一个PDF文件

    • cmd:convert -resize 1240x1753 -units PixelsPerInch -density 150x150 image_stamped.png output.pdf
    • output.pdf(输出):https://www.dropbox.com/s/o9y0jp9b4pm08ci/output.pdf

第三步的输出文件"理论上"与步骤1中的输入文件相同(加上它上面的标记)但是不是,文件有点模糊,并且在传真之后它变成了人类不可兑换的模糊即使你看到input.pdf和output.pdf之间没有区别,像素也不会通过传真线,尝试放大,你会发现文本字符的边缘是模糊的.

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

谢谢 !

Ken*_*enS 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次转换),您将不可避免地失去质量.

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


mkl*_*mkl 5

我仔细看了一下你提供的文件,请看这里:

放大位图

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

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

如果你坚持工作流程(即pdf-> png-> stamped png-> pdf-> fax)你应该

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

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

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

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

在此输入图像描述