我尝试使用ImageMagick(v6.8.9-9 Q16)将包含嵌入其中的PNG文件的PDF转换为PNG文件。
original PNG file具有透明背景。在PDF中也显得很好。但在PNG obtained after conversion中,PDF中最初由PNG占据的区域具有白色背景。请参阅链接以获得更清晰的信息。
我运行的命令如下:
convert -colorspace sRGB dice.pdf converted_dice.png
我还尝试设置-transparent white
开关,但最终会删除最终图像中实际需要的白色。
是否有任何额外的开关或参数传递给convert
才能摆脱这个白色背景?
答案 0 :(得分:1)
您执行此任务的方法无效。
您使用的命令会将完整的信纸大小的PDF页面(612 x 792 pt)转换为PNG图像。
但是,嵌入PDF页面(612 x 792 pt)的图像的原始尺寸为800 x 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
(上面使用的工具{{1} }参数显示PDF页面中的图像属性。如您所见,有两个图像列表:一个是RGB光栅图像,另一个是灰度光栅图像,被称为类型-list
(软掩码)。
这是一个将两个图像都提取为PNG的命令:
smask
这将提取两个:
pdfimages -png dice.pdf dice-images
(彩色图片)dice-images-0000.png
(灰度图像)(注意:只有非常新版本的dice-images-0001.png
,即Poppler版本,才能将图像提取为PNG。在PDF中,没有PNG这样的东西。只有光栅数据,用不同的方法压缩。较旧的版本只能提取图像为PPM或PNM。这对我下面描述的内容没有任何影响。即使你提取PPM / PNM图像,这两个文件仍然可以如下所述处理......)
下面是两个并排缩小的蒙太奇:
如您所见,图像本身没有透明背景,而是白色背景。 (它没有Alpha通道。)在PDF格式中,这两个图像组合使用以创建透明区域:
要将这两个文件(彩色图像和灰度软模板)组合成一个透明的PNG,您现在可以使用ImageMagick ......
答案 1 :(得分:1)
Kurt已经详细解释了整件事。所以这里是通过pdfimages -png
pdfimages -png my.pdf my
这将重新列入两个文件
identify my-0*png
my-000.png PNG 360x310 360x310+0+0 8-bit sRGB 256c 3.3KB 0.000u 0:00.000
my-001.png PNG 360x310 360x310+0+0 8-bit sRGB 256c 9.44KB 0.000u 0:00.000
my-001.png
是smask
中标记为pdfimages -list
的图片。要将图像重新组合回原始表单,请使用-compose CopyOpacity
和ImageMagick命令composite
composite -compose CopyOpacity my-001.png my-000.png my-reassembled.png
有关详细信息,另请参阅http://www.imagemagick.org/Usage/masking/#masks。