如何高质量地将PNG转换为PDF,以免模糊不清?


54

关于如何将PDF文件转换为PNG图像,存在很多问题,但是我正在寻找一个清晰的PNG文件,并且基本上将其包装或嵌入PDF文件中而不会显得模糊或模糊。模糊。

我意识到安装了imagemagic之后,我可以进行简单的转换,例如:

convert sample.png sample.pdf

我还尝试了很多开关来设置深度以及质量设置:

convert -quality 100 sample.png sample.pdf

但是,PDF仍然显得模糊/模糊。

这是一个示例图像:

http://img406.imageshack.us/img406/6461/picture3mu.png

作为png,它又脆又干净。当我将其转换为PDF时,即使大小相同,它也会变得模糊:

图片4.png http://img803.imageshack.us/img803/9969/picture4at.png

如何将PNG高质量转换为PDF?


我希望您能很好地回答您的问题,但是我认为这只是将JPG格式存储图像的PDF的既定属性。像您向我们展示的PNG一样,PNG的质量比JPG更好。
jippie 2012年

1
@cwd:您是否尝试将其放入.tex文件中,然后生成PDF?以\usepackage[pdftex, final]{graphicx}\includegraphics[width=516px]{calendar.png}为例。
伊曼纽尔·伯格

2
@jippie:不,PDF 可以无损存储位图。该链接提供了压缩算法列表,而不是格式列表,因为无法提取PDF内的位图数据并直接将其视为JPEG或TIFF进行查看,但是说PDF图像要么是JPEG(有损, ),JPEG 2000(也有损)或多种TIFF变体中的任何一种(无损)。什么然而,真实的,是一个给定的PDF蒸馏器可能默认为位图转换成DCT(又名JPEG)形式,并必须告知使用无损表单。
沃伦·杨

@cwd您是否考虑过接受一些答案?我觉得user32208的答案是相当不错的unix.stackexchange.com/a/64495/16920
莱奥列奥波尔德·赫兹준 영

Answers:


34

尝试使用该-density选项。默认分辨率为每英寸72点。所以尝试类似的东西-density 300

有关参考,请参见-densityImageMagick命令行选项文档。


密度绝对是关键。比例和密度似乎是成反比的,因此我一直在使用这两种设置以在外观和文件大小方面获得最佳结果。如果有设置的公式,我希望我知道。
Brian Z

如何找到最佳密度选择?with density 300示例图片丢失了多少数据?我认为结果取决于输入。这里关于它的新的线程unix.stackexchange.com/q/292025/16920
莱奥列奥波尔德·赫兹준 영

这根本不会改变我的质量。
Guillaume Chevalier

19

要从中获得好的pdf输出可能非常复杂convert。试试吧img2pdf。从自述文件:

将图像无损地转换为PDF,而无需重新编码JPEG和JPEG2000文件。因此,没有质量损失,也没有不必要的大输出文件。

需要说明的是:PDF可以嵌入无损JPEG 2000图像(大多数读者似乎都支持它们)。因此,这种转换是完全无损的:

convert sample.png -quality 0 sample.jp2
img2pdf -o sample.pdf sample.jp2

(当然,假设JP2委托人可用:检查identify -list format | grep JP2。)


4
这是恕我直言,这是最好的答案,但是您应该更好地解释自己的观点,即PDF可以嵌入无损JPEG 2000图像。因此,OP的完整命令应类似于:convert sample.png -quality 0 sample.jp2; img2pdf -o sample.pdf sample.jp2。(当然,假设有JP2代表可用:请检查identify -list format | grep JP2。)
Nemo

1
如果要坚持在Ubuntu 14上使用标准存储库,请先converttiff然后再tiff2pdf
卡米尔·古德塞内

这是一个很好的答案,非常感谢。
Lyubomyr Shaydariv

@ brian-z在您的回答中能否解释这个论点-quality 0
SebMa

SebMa,@ Nemo添加了该命令,但我认为应该-quality 100改为使用该命令?
Brian Z

14

我几乎可以肯定,您认为PDF质量下降的原因仅仅是PDF查看器抗锯齿功能的影响。

如果您用于evince查看PDF,则可以看到抗锯齿功能以某个缩放比例自动关闭(在我的快速测试中为300%)。当您继续放大时,您可以生动地看到这一点-您会注意到在某些时候像素突然变得清晰可见。这就是必须关闭抗锯齿功能以进行精确图像检查的时候。


嗯-很有道理,但我想我希望能够以某种方式将图像和“初始视图”设置为100%,以便看起来更清晰。
cwd 2012年

1
@cwd不要将缩放(检查文件的一种方式)与图像平滑的实际原因:反走样。图像已正确存储。是PDF查看器欺骗了您。但是,即使您要使用其他查看应用程序或更改其设置,也可能是相反的方式。然后,您可以在PDF文件中看到清晰的图像,并在图像查看器中看到平滑的PNG文件。
rozcietrzewiacz 2012年

3

上面的Brian Z提供了以下内容,这是将png转换为pdf的正确,完全可逆且无损的方法(假设转换步骤实际上是无损的,我认为应该或至少应该这样做)。您需要从png转换为无损jp2,以便与PDF结构/阅读器兼容(我认为)。

$ convert sample.png -quality 0 sample.jp2
$ img2pdf -o sample.pdf sample.jp2

但是,值得注意的是,您可以将.png文件本身直接提供给img2pdf,例如:

$ img2pdf -o sample.pdf sample-page1.png <sample-page2.png ...>

这将产生最小的pdf文件,并将png的原始十六进制无损地插入pdf中的对象。

*缺点是,与使用jp2相比,此过程不可逆。页眉/页脚以及块页眉/页脚数据已从插入的png中剥离(实际上使文件更小!),仅留下原始图片数据(已删除的元数据已集成到pdf结构中),大概是为了“破解” pdf以显示原始png,而该png在技术上与容器不兼容。它在Firefox中可以正常显示,并且在所有现代阅读器中都可以正常显示,但是如果png与容器不兼容,则严格的阅读器可能不会呈现原始png数据(因为他们不应该期望它/正确处理它)。

在这里,您可以找到一个非常原始的bash脚本,该脚本对我有用,可以提取和重建具有与用于pdf输入的哈希值匹配的哈希值的png文件。https://github.com/jack4455667788/RebuildRawPNGExtractedFromPDF


2

PDF是矢量格式(即文件包含要绘制的线条的描述),而其他格式(JPG,PNG)是光栅格式(文件描述了绘制每个像素的颜色)。如果您炸掉PDF,它仍然只是清晰的线条;JPG和PNG显示像素化。

(好的,好的,我撒谎了。PDF也可以是光栅)。


2

我认为对于png-to-pdf -density参数应该较小而不是较大。您可以尝试类似convert -quality 100 -density 50


3
没有,更高的密度肯定更好,只是做了一个测试,有50个结果中有很多非常可见的像素,有300个很好,而且外观清晰。
shaunhusain 2014年

这让我感到困惑,但是我认为较高的密度会导致输出分辨率较低的图像。这意味着,如果输出是模糊的(像原始问题中的示例一样,混淆过度),则您需要的是较低的密度。但是,如果将PDF 像素化,则确实需要以更高的密度进行转换。
Brian Z
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.