首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pdf>png>pdf后文本pdf的质量下降

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

Stack Overflow用户
提问于 2012-11-07 20:59:08
回答 2查看 3.1K关注 0票数 1

我有一个非常特殊的要求,我必须自动盖章PDF文件的每一页(对于传真应用程序),下面是我所做的过程:

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

代码语言:javascript
复制
- 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 (input): [https://www.dropbox.com/s/p2ajqxe99nc0h8m/input.pdf](https://www.dropbox.com/s/p2ajqxe99nc0h8m/input.pdf)
- image\_raw.png (output): [https://www.dropbox.com/s/4cni4w7mqnmr0t7/image\_raw.png](https://www.dropbox.com/s/4cni4w7mqnmr0t7/image_raw.png)

  • 步骤2:给每个PNG文件盖章(使用第三方工具.)

代码语言:javascript
复制
- image\_stamped.png (output): [https://www.dropbox.com/s/3ryiu1m9ndmqik6/image\_stamped.png](https://www.dropbox.com/s/3ryiu1m9ndmqik6/image_stamped.png)

  • 步骤3:将PNG文件重新转换为一个文件

代码语言:javascript
复制
- cmd: **convert -resize 1240x1753 -units PixelsPerInch -density 150x150 image\_stamped.png output.pdf**
- output.pdf (output): [https://www.dropbox.com/s/o9y0jp9b4pm08ci/output.pdf](https://www.dropbox.com/s/o9y0jp9b4pm08ci/output.pdf)

第三步的输出文件应该“理论上”与步骤1中的输入文件相同(加上它上的邮票),但它不是,该文件是模糊的,在传真后它变成了不可读的文件,因为模糊的像素不会通过传真线,即使您可能看到input.pdf和output.pdf之间没有区别,尝试放大,你会发现文本字符在它的边缘是模糊的。

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

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-08 08:26:06

您使用的是反混叠(TextAlphaBits=4).这是通过在文本边缘的黑色像素之间引入灰色像素来“平滑”文本的边缘。在低分辨率(如显示)时,这可以防止文本中的“锯齿”,并给出更易读的结果。在更高的分辨率下,它的价值是值得商榷的。

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

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

如果你认为你仍然想要反别名,你可以尝试减少侵略性,你现在让它设置为4,尝试将它减少到2。

关于其他评论,Kurt是相当正确的,就像fourat一样,我担心MarcB弄错了,-r400为渲染设置了分辨率,以每英寸点为单位。如果只给出一个数字,则它同时用于x和y分辨率。可以使用Ghostscript生成固定大小的光栅,但是您可以使用-dFIXEDMEDIA和-sPAPERSIZE开关,或者使用-g开关自动设置FIXEDMEDIA。

虽然我同意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个转换),您将不可避免地失去质量。

如果可能的话,将所有内容保留为矢量数据。当移动到图像数据是不可避免的,创建图像数据,因为您需要它最终使用,不要进一步转换它。

票数 5
EN

Stack Overflow用户

发布于 2012-11-08 09:43:33

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

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

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

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

  1. 在最初的光栅化已经使用每英寸的分辨率,您的光栅图像将在以下所有步骤(包括传真传输),
  2. 避免抗混叠和α位的使用。KenS的答案),以及
  3. 将光栅化图像限制在传真传输可用的颜色空间上,即最有可能是黑白图像。

PS正如KenS所指出的,原来的PDF仅仅是图像的容器(一开始就有些模糊)。因此,改进工作流程的另一种方法是提取该图像而不是呈现它,给原始图像盖章,并且只在传真时调整它的大小(同样没有反混叠)。

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

https://stackoverflow.com/questions/13278118

复制
相关文章

相似问题

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