我很难让 ImageMagickidentify
将 PDF 识别为 CMYK。
本质上,假设我正在构建这个文件,test.tex
,pdflatex
:
\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,它将被识别为CMYK identify
- 但即使在那里也没有运气:
$ 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 海报示例:将 pdf 页面大小拟合到(位图)图像大小?#17843 - TeX - LaTeX - Stack Exchangeconvert
获取使用和生成此类 PDF 文件的命令行示例gs
。其实我们可以执行:
convert test.pdf -depth 8 -colorspace cmyk -alpha Off test-c.pdf
...这将导致 PDF 被identify
编辑为 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 颜色直方图) - 是否有任何其他类似于 的命令行 Linux 工具
identify
,即使在原始test.pdf
from中也可以正确识别 CMYK 颜色的使用pdflatex
(并且可能基于任意选择的 PDF 页面构建颜色直方图,就像identify
应该的那样)?
提前感谢您的任何答案,
干杯!
一些参考资料:
- adobe - 在 PDF 中将 RGB 转换为 CMYK 的脚本(或其他方式)?- 堆栈溢出
- color - PDF 颜色模型和 LaTeX - TeX - LaTeX
- color - xcolor 包的选项 cmyk 不会产生 CMYK PDF - TeX - LaTeX
- 制作 cmyk PDF - comp.text.tex | 计算机组
- 使用 ghostscript 进行色彩管理?- 犀牛:
例如是否指定为“0 0 0 1 setcmykcolor”?或者可能更确切地说是“0 0 0 setrgbcolor”?在后一种情况下,如果将 DeviceRGB 重新映射到基于 CIE 的颜色空间以对 RGB 图像进行颜色管理,那么您最终会得到文本的丰富黑色。