您对此任务的处理方式无法正常工作。
您将使用完整的信纸大小的PDF页面(612 X 792磅)转换成PNG图像的命令。
然而,嵌入到PDF页面(612 X 792磅)的图像的原尺寸为800×600像素。这可以通过运行pdfimages -list
可以看出:
pdfimages -list dice.pdf
page num type width height color comp bpc enc interp object ID x-ppi y-ppi size ratio
----------------------------------------------------------------------------------------
1 0 image 800 600 rgb 3 8 image no 12 0 72 72 277K 20%
1 1 smask 800 600 gray 1 8 image no 12 0 72 72 50.1K 11%
所以转换PDF页面时,这是第一个问题:它不给你所包含的图像的正确尺寸。
然而,第二,更根本的问题是:你从转换PDF页面得到任何图像重叠在对方,因为他们是从页区域中的所有PDF对象的组合。 (当然,您只能裁剪页面的一部分 - 但同样也可以将裁剪区域中的所有PDF对象组合在一起...)。当您尝试将所有白色像素转换为透明像素时,会遇到这种结果:由于原本不同的对象会合并为一个像素表示,因此您不能再根据需要区分它们。
您应该采取不同的方法并使用不同的工具来提取图像:使用pdfimages
(以上用于与-list
参数从PDF的页面上显示的图像性能工具)。正如你所看到的,有图像列表:一种是RGB光栅图像,另一个是灰度光栅图像,被戏称为类型smask
(softmask)。
这里是一个命令来提取两个图像作为PNG:
pdfimages -png dice.pdf dice-images
这将提取两个:
dice-images-0000.png
(彩色图像)
dice-images-0001.png
(灰度图像)
(注意:只有Poppler版本pdfimages
的最新版本才能让您将图像解压缩为PNG。在PDF中没有PNG这样的东西。只有栅格数据,用不同的方法压缩。旧版本只能将图像提取为PPM或PNM。这对我在下面描述的内容没有任何影响。即使你提取PPM/PNM图片,这两个文件仍然可以如下所述处理...)
下面是两者的并排侧,按比例缩小的蒙太奇:
正如你所看到的,图像本身没有透明背景,而是一个白色背景。 (它不具有Alpha通道)内PDF格式,这两个图像结合使用,以创建透明区域:
- 什么出现在softmask完全黑(右)表示:真正的这个像素图像(左)意味着完全透明。
- 什么看起来完全白色的软掩模(右)意味着:这个像素的真实图像(左)是完全不透明的。
- 在软掩模中出现的灰色阴影(右)意味着:实像(左)的这个像素意味着部分透明(与其灰度/黑色级别一致)。
要结合这两个文件(彩色图像和灰度softmask)回一个PNG透明,你可以使用ImageMagick的现在......
没有*“包含PNG文件的PDF”*。一旦图像位于PDF内部,它就是栅格数据(对于这些栅格数据块有各种压缩方案 - 其中一个与JPEG使用相同)。它以前可能是一个PNG文件,但它不再是。没有办法从PDF数据中发现这一点。当然,您可以提取栅格数据并将它们再次转换为PNG格式。或者转换为TIFF,GIF,JPEG ......如果您对PDF的创建没有预知,那么您将不会了解包含的图像以前的生命形式...... – 2014-11-14 21:58:40