2014-11-06 74 views
1

覆盖的部分后面的白色背景,结果PDF文件转换我试着使用的ImageMagick(v6.8.9-9 Q16),以含有嵌入到一个PNG PNG文件为PDF转换文件。使用ImageMagick具有在其中光栅由光栅

original PNG file具有透明背景。在PDF也看起来很好。但在PNG obtained after conversion中,PDF中最初由PNG占据的区域具有白色背景。请参阅链接更清晰。

我跑的命令如下:

convert -colorspace sRGB dice.pdf converted_dice.png

我也尝试设置-transparent white开关,但它最终取出了最终图像中实际上需要的白人。

是否有任何额外的开关或参数传递给convert为了摆脱眼前这个白色的背景?

+0

没有*“包含PNG文件的PDF”*。一旦图像位于PDF内部,它就是栅格数据(对于这些栅格数据块有各种压缩方案 - 其中一个与JPEG使用相同)。它以前可能是一个PNG文件,但它不再是。没有办法从PDF数据中发现这一点。当然,您可以提取栅格数据并将它们再次转换为PNG格式。或者转换为TIFF,GIF,JPEG ......如果您对PDF的创建没有预知,那么您将不会了解包含的图像以前的生命形式...... – 2014-11-14 21:58:40

回答

1

您对此任务的处理方式无法正常工作。

您将使用完整的信纸大小的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 

这将提取两个:

  1. dice-images-0000.png(彩色图像)
  2. dice-images-0001.png(灰度图像)

注意:只有Poppler版本pdfimages的最新版本才能让您将图像解压缩为PNG。在PDF中没有PNG这样的东西。只有栅格数据,用不同的方法压缩。旧版本只能将图像提取为PPM或PNM。这对我在下面描述的内容没有任何影响。即使你提取PPM/PNM图片,这两个文件仍然可以如下所述处理...)

下面是两者的并排侧,​​按比例缩小的蒙太奇:

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

正如你所看到的,图像本身没有透明背景,而是一个白色背景。 (它不具有Alpha通道)内PDF格式,这两个图像结合使用,以创建透明区域:

  1. 什么出现在softmask完全黑(右)表示:真正的这个像素图像(左)意味着完全透明。
  2. 什么看起来完全白色的软掩模(右)意味着:这个像素的真实图像(左)是完全不透明的。
  3. 在软掩模中出现的灰色阴影(右)意味着:实像(左)的这个像素意味着部分透明(与其灰度/黑色级别一致)。

要结合这两个文件(彩色图像和灰度softmask)回一个PNG透明,你可以使用ImageMagick的现在......

+0

“要合并这两个文件(彩色图像和灰度软掩模)恢复为一个透明的PNG,现在可以使用ImageMagick ......“ - ImageMagick命令是做什么的?即转换 - ??? – evandrix 2015-12-14 14:43:33

1

库尔特已经介绍的很详细了整个事情。因此,这里仅仅是如何运行它之后通过pdfimages -png

pdfimages -png my.pdf my 

这resluts在两个文件中

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组装与ImageMagick的图像。为了重新组装图像返回到它的原始形式使用-compose CopyOpacity与ImageMagick的命令composite

composite -compose CopyOpacity my-001.png my-000.png my-reassembled.png 

http://www.imagemagick.org/Usage/masking/#masks更多信息见。