使用Imagemagick转换其中包含栅格的PDF会导致栅格覆盖的部分后面出现白色背景

时间:2014-11-06 09:16:21

标签: imagemagick imagemagick-convert

我尝试使用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才能摆脱这个白色背景?

2 个答案:

答案 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

这将提取两个:

  1. pdfimages -png dice.pdf dice-images (彩色图片)
  2. dice-images-0000.png(灰度图像)
  3. 注意:只有非常新版本的dice-images-0001.png,即Poppler版本,才能将图像提取为PNG。在PDF中,没有PNG这样的东西。只有光栅数据,用不同的方法压缩。较旧的版本只能提取图像为PPM或PNM。这对我下面描述的内容没有任何影响。即使你提取PPM / PNM图像,这两个文件仍然可以如下所述处理......)

    下面是两个并排缩小的蒙太奇:

    Color image from PDF (left) with associated soft-mask (right)

    如您所见,图像本身没有透明背景,而是白色背景。 (它没有Alpha通道。)在PDF格式中,这两个图像组合使用以创建透明区域:

    1. 在软掩码中显示为完全黑色(右)意味着:真实图像的这个像素(左)意味着完全透明。
    2. 在软掩码中看起来完全是白色的(右)意味着:真实图像的这个像素(左)意味着完全不透明。
    3. 软面罩中出现的灰色阴影(右)意味着:真实图像的这个像素(左)意味着部分透明(与其灰度/黑色水平一致)。
    4. 要将这两个文件(彩色图像和灰度软模板)组合成一个透明的PNG,您现在可以使用ImageMagick ......

答案 1 :(得分:1)

Kurt已经详细解释了整件事。所以这里是通过pdfimages -png

运行ImageMagick后如何组装图像的方法
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.pngsmask中标记为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