我很难让ImageMagick的identify
识别PDF为CMYK格式。
简而言之,假设我正在使用pdflatex
构建名为test.tex
的文件:
\documentclass[a4paper,12pt]{article}
%% https://tex.stackexchange.com/questions/13071
\pdfcompresslevel=0
%% http://compgroups.net/comp.text.tex/Making-a-cmyk-PDF
%% ln -s /usr/share/color/icc/sRGB.icm .
% \immediate\pdfobj stream attr{/N 4} file{sRGB.icm}
% \pdfcatalog{%
% /OutputIntents [ <<
% /Type /OutputIntent
% /S/GTS_PDFA1
% /DestOutputProfile \the\pdflastobj\space 0 R
% /OutputConditionIdentifier (sRGB IEC61966-2.1)
% /Info(sRGB IEC61966-2.1)
% >> ]
% }
%% http://latex-my.blogspot.com/2010/02/cmyk-output-for-commercial-printing.html
%% https://tex.stackexchange.com/questions/9961
\usepackage[cmyk]{xcolor}
\begin{document}
Some text here...
\end{document}
如果我尝试识别生成的test.pdf
文件,无论我尝试了什么选项(至少根据源代码中提供的链接),它都会以RGB格式显示,但其中的颜色将以CMYK格式保存; 对于上面的源代码:
$ grep -ia 'cmyk\|rgb\| k' test.pdf
0 0 0 1 k 0 0 0 1 K
0 0 0 1 k 0 0 0 1 K
0 0 0 1 k 0 0 0 1 K
0 0 0 1 k 0 0 0 1 K
FontDirectory/CMR12 known{/CMR12 findfont dup/UniqueID known{dup
/PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.11-2.2 (TeX Live 2010) kpathsea version 6.0.0)
$ identify -verbose 'test.pdf[0]'
...
Type: Palette
Endianess: Undefined
Colorspace: RGB
Depth: 16/8-bit
Channel depth:
red: 8-bit
green: 8-bit
blue: 8-bit
Channel statistics:
Red:
...
Green:
...
Blue:
...
Histogram:
5: (12593,11565,11822) #31312D2D2E2E rgb(49,45,46)
4: (16448,15420,15677) #40403C3C3D3D rgb(64,60,61)
9: (20303,19275,19532) #4F4F4B4B4C4C rgb(79,75,76)
25: (23901,23130,23387) #5D5D5A5A5B5B rgb(93,90,91)
...
如果我取消注释\immediate\pdfobj stream ...
部分,基本上也会发生同样的事情;然而,如果文档中只有一种颜色(黑色),我就不知道identify
从哪里得到RGB值的直方图了(尽管可以说,所有的值都接近灰色)?!
那么,无论如何,我认为最好尝试使用 ghostscript
将 test.pdf
转换为新的pdf文件,这将被identify
识别为CMYK - 但是即使在那里也没有成功:
$ gs -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -sOutputFile=test-gs.pdf -dUseCIEColor -sProcessColorModel=DeviceRGB -dProcessColorModel=/DeviceCMYK -sColorConversionStrategy=/CMYK test.pdf
GPL Ghostscript 9.01 (2011-02-07)
Copyright (C) 2010 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
$ identify -verbose 'test-gs.pdf[0]'
...
Type: Grayscale
Base type: Grayscale
Endianess: Undefined
Colorspace: RGB
Depth: 16/8-bit
...
所以,identify
唯一感知到的变化是 Type: Grayscale
(相对于之前的 Type: Palette
);但除此之外,它仍然将颜色空间视为 RGB!
此外,请注意,identify
确实能够正确地报告 CMYK pdf - 参见CMYK poster example: fitting pdf page size to (bitmap) image size? #17843 - TeX - LaTeX - Stack Exchange,其中提供了使用 convert
和 gs
生成此类 PDF 文件的命令行示例。实际上,我们可以执行:
convert test.pdf -depth 8 -colorspace cmyk -alpha Off test-c.pdf
...并且这将会生成一个PDF,该PDF将被识别为CMYK - 然而,默认情况下,PDF也将被光栅化(默认为72 dpi)。
编辑:我刚刚发现,如果我在OpenOffice中创建一个.odp演示文稿,并将其导出为PDF; 那么默认情况下,该PDF将是RGB的,但是以下命令(来自ghostscript示例| Production Monkeys):
# Color PDF to CMYK:
gs -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite \
-sColorConversionStrategy=CMYK -dProcessColorModel=/DeviceCMYK \
-sOutputFile=output.pdf input.pdf
...实际上将生成CMYK PDF,并由identify
报告为这样(尽管黑色会丰富,而不是平淡 - 在所有四个通道上); 然而,仅当幻灯片添加了图像时(显然,它是触发颜色转换的一种?!),此命令才能工作!奇怪的是,我无法从pdflatex
PDF中获得相同的效果。
所以我想我的问题可以有两种方式提出:
- 是否有任何Linux命令行转换方法,可以将RGB PDF转换为CMYK PDF,同时保留矢量,被
identify
识别为这样(因此将构建正确的CMYK颜色直方图) - 是否还有其他类似于
identify
的命令行Linux工具,即使在来自pdflatex
的原始test.pdf
中也会正确识别使用CMYK颜色(并可能基于任意选择的PDF页面构建颜色直方图,就像identify
应该做的那样)?
提前感谢任何答案,
干杯!
一些参考文献:
- adobe - Script (or some other means) to convert RGB to CMYK in PDF? - Stack Overflow
- color - PDF colour model and LaTeX - TeX - LaTeX - Stack Exchange
- color - Option cmyk for xcolor package does not produce a CMYK PDF - TeX - LaTeX - Stack Exchange
- Making a cmyk PDF - comp.text.tex | Computer Group
- colormanagement with ghostscript ? - Rhinocerus:
Is it for instance specified as "0 0 0 1 setcmykcolor"? Or possibly rather as "0 0 0 setrgbcolor"? In the latter case you would end up with a rich black for text, if DeviceRGB is remapped to a CIE-based color space in order to get RGB images color managed.
identify
不是检查转换成功的好方法。我拿一个PDF文件,identify
声称使用CMYK颜色空间,并检查其是否符合PDF/X标准,在Acrobat的预检功能中,这揭示了颜色仍然是RGB。此外,如果identify
是ImageMagick的一部分,那么它正在栅格化PDF,因此我不确定它所说的任何内容都是可靠的(在直方图中我得到灰度值,但我有一个纯白和黑色的矢量PDF,表明可能发生了一些反锯齿处理)。 - darda