如何确定在pdf到图像转换中使用哪个色彩空间?

时间:2017-10-24 01:03:49

标签: pdf docker imagemagick

我有一个简单的脚本可以将pdf文件转换为png文件。

它基本上运行此convert命令:

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

但是我有一个特殊的pdf文件,其白色背景如下:

enter image description here

结果如下:

enter image description here

您可以看到白色背景变为黑色。

我只需将参数切换为-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?

修改

文件can be viewed here

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 /

可以在此处找到完整的文件集:https://github.com/kongakong/StackoverflowCode/tree/convert-pdf-imagemagic/imagemagick/46900660

2 个答案:

答案 0 :(得分:1)

行。我已下载您的PDF文件。您的文件是sRGB。它具有透明度。如果使用-alpha off关闭透明度,它将具有黑色背景,因为在这种情况下透明度是透明的黑色,即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质量的链接设置质量。

enter image description here

答案 1 :(得分:0)

您的输入示例是JPG而不是PDF。你可以把原始的pdf作为链接发布吗?

如果您不想使用配置文件,那么您应该在阅读输入PDF之前使用-colorspace sRGB转换为sRGB。如果图像是CMYK,那么它将转换为SRGB。如果它已经是sRGB,那么把它放在那里并没有什么坏处。

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

此外,密度未指定百分比。它是dpi(或dotspercentimeter)的数值。因此,如果你想确定,应该指定单元。

此外,如果您的PDF具有透明度,并且您关闭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

您还可以使用以下方式检查个人资料:

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

以及

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