如何确定使用PDF进行图像转换的颜色空间?

我有一个简单的脚本,将PDF文件转换成PNG文件。

它基本上运行这个convert命令:

 convert -strip -quiet -quality 100 -alpha off -density 165% -scene 1 -colorspace sRGB "/data/input.pdf" "/output/image.png" 

然而,我有这样一个白色的背景这个特殊的PDF文件:

在这里输入图像说明

结果如下所示:

在这里输入图像说明

你可以看到白色的背景变成了黑色。

我可以通过简单地将参数切换到-colorspace cmyk来修复它

我在文件上运行identify ,但它不表示cmyk

 > identify /data/input.pdf /data/input.pdf PDF 1920x1080 1920x1080+0+0 16-bit sRGB 2.07246MiB 0.000u 0:00.000 

我的问题是:

我怎么知道什么时候使用sRGB空间(这个工作直到这个文件出现)以及何时使用cmyk?

编辑:

该文件可以在这里查看

ImageMagick版本信息

 > convert --version Version: ImageMagick 6.9.9-19 Q16 x86_64 2017-10-24 http://www.imagemagick.org Copyright: © 1999-2017 ImageMagick Studio LLC License: http://www.imagemagick.org/script/license.php Features: Cipher DPC OpenMP Delegates (built-in): bzlib djvu fontconfig freetype gvc jbig jng jpeg lcms lqr lzma openexr png tiff wmf x xml zlib 

这里是复制我的开发环境的dockerfile:

 FROM ubuntu:16.04 RUN apt-get update --fix-missing RUN apt-get install -y libmagickwand-dev wget WORKDIR '/src' ENV IMAGEMAGICK_VERSION 6.9.9-19 RUN wget --no-check-certificate https://github.com/ImageMagick/ImageMagick/archive/${IMAGEMAGICK_VERSION}.tar.gz -O ${IMAGEMAGICK_VERSION}.tar.gz && \ tar -zxvf ${IMAGEMAGICK_VERSION}.tar.gz && \ cd ImageMagick-${IMAGEMAGICK_VERSION} && \ ./configure && \ make && \ make install && \ ldconfig /usr/local/lib WORKDIR / COPY *.pdf / COPY *.sh / 

全套文件可以在这里find: https : //github.com/kongakong/StackoverflowCode/tree/convert-pdf-imagemagic/imagemagick/46900660

好。 我已经下载了你的PDF文件。 您的文件是sRGB。 它具有透明度。 如果您使用-alpha offclosures透明度,则会出现黑色背景,因为透明度在这种情况下是透明的,即rgb(0,0,0,0)。 如果你想要一个白色背景,那么你必须将结果展平白色背景。 所以这对我来说很好。

 convert -quiet -density 165 -colorspace sRGB color-p9.pdf[0] -background white -flatten color-p9.png 

使用PNG输出适用于我,但文件太大,无法发布。 所以我已经把它转换成JPG,只是在这里显示。 你可以在你的系统上使用png输出,并根据我之前发布的描述png质量的链接设置质量。

在这里输入图像说明

您的input示例是JPG而不是PDF。 你能把原始pdf作为链接吗?

如果您不想使用configuration文件,那么在读取input的PDF之前,您应该使用-colorspace sRGB将其转换为sRGB。 如果图像是CMYK,那么它将转换为SRGB。 如果它已经是sRGB,那么在那里就不会有什么伤害。

请注意,PNG输出的质量与JPG不同。 所以你需要的价值是不同的。 另外它应该放在阅读PDF之后,因为它适用于输出。 见http://www.imagemagick.org/script/command-line-options.php#quality

密度也没有以百分比表示。 它是dpi(或dotspercentimeter)的数值。 所以,如果你想确定的话,应该指定单位。

另外,如果您的PDF具有透明度,并且您closures了Alpha,则背景会变黑,因为透明是透明的黑色。

所以像这样:

 convert -quiet -density 165 -colorspace sRGB "/data/input.pdf[0]" -alpha off -quality XX "/output/image.png" 

我已经添加了页面ID为[0]到PDF来获取第一页代替使用-scene。 要么应该没问题。 你可以添加-strip,如果你想,但阅读PDF后。

如果你想看看你的PDF文件有什么色彩空间,那么你应该在处理之前检查它。

 convert image.pdf -format "%[colorspace]" info: 

http://www.imagemagick.org/script/escape.php

您也可以使用以下方式检查configuration文件

 convert image.pdf -format "%[profiles]" info: 

并且

 convert image.pdf -format "%[profile:icc]" info: convert image.pdf -format "%[profile:icm]" info: