使用Imagemagick转换包含光栅的PDF,会在光栅覆盖的部分后面生成白色背景
我尝试使用ImageMagick(v6.8.9-9 Q16)将包含PNG文件的PDF转换为PNG文件 背景是透明的。在阳光下,它看起来也很好。但在中,PDF中最初由PNG占据的区域具有白色背景。请查看链接以了解更多信息 我运行的命令如下所示:使用Imagemagick转换包含光栅的PDF,会在光栅覆盖的部分后面生成白色背景,imagemagick,imagemagick-convert,Imagemagick,Imagemagick Convert,我尝试使用ImageMagick(v6.8.9-9 Q16)将包含PNG文件的PDF转换为PNG文件 背景是透明的。在阳光下,它看起来也很好。但在中,PDF中最初由PNG占据的区域具有白色背景。请查看链接以了解更多信息 我运行的命令如下所示: convert-colorspace sRGB dice.pdf converted_dice.png pdfimages -png my.pdf my 我还尝试设置了-透明白色开关,但它最终去掉了最终图像中实际需要的白色 是否有任何额外的开关或参数要传
convert-colorspace sRGB dice.pdf converted_dice.png
pdfimages -png my.pdf my
我还尝试设置了-透明白色
开关,但它最终去掉了最终图像中实际需要的白色
是否有任何额外的开关或参数要传递到
convert
,以摆脱这种白色背景?您执行此任务的方法无法工作
您使用的命令将完整的字母大小的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
(上面使用的工具与-list
参数一起显示PDF页面中的图像属性)。如您所见,有两个图像列表:一个是RGB光栅图像,另一个是灰度光栅图像,称为typesmask
(软掩码)
以下是将两幅图像提取为PNG的命令:
pdfimages -png dice.pdf dice-images
这将提取两个:
dice-images-0000.png
(彩色图像)dice-images-0001.png
(灰度图像)pdfimages
,即Poppler版本,才允许您将图像提取为PNG。在PDF中没有PNG。只有光栅数据,使用不同的方法进行压缩。旧版本只能将图像提取为PPM或PNM。这对您没有任何影响我在下面描述的内容。即使您提取PPM/PNM图像,这两个文件仍可以按如下所述进行处理…)
下面是这两幅作品并排缩小的蒙太奇:
如您所见,图像本身没有透明背景,而是白色背景(没有Alpha通道)。在PDF格式中,这两个图像组合使用以创建透明区域:
要将这两个文件(彩色图像和灰度软蒙版)组合成一个透明的PNG,您现在可以使用ImageMagick…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
是在pdfimages-list
中标记为smask
的图像。要将图像重新组装回其原始形式,请使用-compose copycopacity
和ImageMagick命令composite
composite -compose CopyOpacity my-001.png my-000.png my-reassembled.png
有关更多信息,另请参见。没有“包含PNG文件的PDF”。一旦图像位于PDF中,它就是光栅数据(对于这些光栅数据块有各种压缩方案,其中一种与JPEG使用的压缩方案相同)。它可能是以前的PNG文件,但现在已经不存在了。无法仅从PDF数据中发现它。当然,您可以提取光栅数据并将其再次转换为PNG。或者转换为TIFF、GIF、JPEG……如果您对PDF的创建没有先见之明,您将不知道包含的图像以前的life form…“要将这两个文件(彩色图像和灰度软遮罩)组合回一个具有透明度的PNG,您现在可以使用ImageMagick…”--ImageMagick命令是如何执行此操作的?即转换-???