首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在PDF中嵌入ICC颜色配置文件

在PDF中嵌入ICC颜色配置文件
EN

Stack Overflow用户
提问于 2015-07-23 15:17:36
回答 2查看 10.6K关注 0票数 9

我正在生成一个PDF,其中所有的图形都绘制在\DeviceRGB中的sRGB颜色空间。我想转换PDF到一个不同的颜色配置文件使用ICC配置文件和嵌入ICC配置文件,但我找不到一个很好的工具这样做。

我尝试过ImageMagick,但是这会使PDF变得不受欢迎,我也尝试过使用Ghostscript。但是,虽然这转换了颜色,但它没有嵌入ICC配置文件。

是否有任何工具或库(最好是Java或Scala)可用于Linux,以满足我的要求?

我尝试过的Ghostscript命令是:

代码语言:javascript
运行
复制
gs -o cmyk.pdf -sColorConversionStrategy=CMYK -sDEVICE=pdfwrite \
   -dOverrideICC=true -sOutputICCProfile=CoatedFOGRA27.icc \
   -dRenderIntent=3 in.pdf

代码语言:javascript
运行
复制
gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -ColorConversionStrategy=CMYK \
   -dProcessColorModel=/DeviceCMYK -sOutputICCProfile=CoatedFOGRA27.icc \
   -sOutputFile=cmyk.pdf in.pdf 

以及上面的几个变体。我已经尝试过Ghostscript版本9.10和9.16。

EN

回答 2

Stack Overflow用户

发布于 2015-07-23 16:41:13

使用Ghostscript v9.16或更高版本:

请阅读其有关ICC颜色配置文件支持的文档,可在此查阅:

这里有一个可能的命令来转换颜色空间并嵌入ICC配置文件:

代码语言:javascript
运行
复制
gs -o cmyk-doc.pdf      \
   -sDEVICE=pdfwrite    \
   -dOverrideICC=true   \
   -sDefaultCMYKProfile=/path/to/mycmykprofile.icc \
   -sOutputICCProfile=/path/to/mydeviceprofile.icc \
   -dRenderIntent=3     \
   -dDeviceGrayToK=true \
    input-doc.pdf

(-dRenderIntent:可能的参数是0 (感知)、1 (色度)、2 (饱和度)和3 (绝对比色))。

注意事项

如果您查看屏幕上的PDF文件(或打印时打印在纸上),则使用上述命令转换并使用:

  • 未经校准的监视器/屏幕;
  • 非校准打印装置;
  • 未经校准的房间照明;或
  • PDF阅读器,它不能处理嵌入式ICC配置文件,然后

你可能会失望。使用错误的ICC配置文件或与输出配置文件所期望的不匹配的纸张类型也会导致问题。

票数 6
EN

Stack Overflow用户

发布于 2019-07-08 19:36:39

AFAIU,Ghostscript 9.12-9.27无法实现您的期望。

但你也许能部分地实现你的目标:

  • 试试UseDeviceIndependentColor。 这不会嵌入您的配置文件,也不会将颜色转换为您的配置文件。但它将使您的颜色“色彩定义”,并将嵌入一些icc配置文件。如果你的目标是“保留”颜色,那可能对你有用。
  • 尝试PDF/X-3输出,嵌入“输出意图”icc配置文件。
  • 尝试调整DefaultRGB颜色空间 --注意文档中的以下短语: 如果用户需要进行非平凡的颜色调整,则必须定义一个非平凡的DefaultRGB颜色空间。

(我从来没有试过这个。)

玩具例子

原始档案:

gs命令:

代码语言:javascript
运行
复制
 gswin64c -dPDFX -dBATCH -dNOPAUSE -dHaveTransparency=false -r20 
  -dProcessColorModel=/DeviceCMYK -sColorConversionStrategy=UseDeviceIndependentColor 
  -sDefaultRGBProfile="default_rgb.icc" -sOutputICCProfile="cmyk_des_renderintent.icc" 
  -dRenderIntent=1 -dDefaultRenderingIntent=/Perceptual -sDEVICE=pdfwrite 
  -sOutputFile=colorbar_v1.pdf PDFX_IntCmyk.ps Colorbar.pdf

在Acrobat中,输出看起来是这样的(它尊重嵌入的“输出意图”icc配置文件):

Foxit Reader中的同一个文件(它忽略了嵌入的“输出意图”):

这里发生了什么:

  • renderintent.icc配置文件(如Ghostscript 9.21色彩管理中所描述的)的设计使不同的意图输出不同的颜色:。
    • “感知”渲染意图(0)只输出青色,
    • "RelativeColorimetric“意图(1)只输出品红
    • “饱和”渲染意图(2)只输出黄色。

  • -dHaveTransparency=false确保第二页会被光栅化(因为有透明的tikz图片)
  • -r20确保栅格化清晰可见(因为只有20 due)
  • -sOutputICCProfile="cmyk_des_renderintent.icc" -dRenderIntent=1使光栅产生洋红输出。
    • 注意,OutputICCProfile参数在当前文档中没有提到,因为 (9.27博士有点过时)。
    • 在这种情况下,RenderIntent也是没有文档的。它也只会影响光栅化。

  • -dDefaultRenderingIntent=/Perceptual将表示的意图与“输出意图icc配置文件”一起放在元数据中。这使得Acrobat把所有的东西都画成了青色。
  • -sDefaultRGBProfile="default_rgb.icc"是用于输入icc配置文件的可能实验的占位符。如果省略此参数,则设置相同的默认值。 如果您知道您的输入配置文件是sRGB (但它不是嵌入式的- pdf是普通的\DefaultRGB),那么在这里显式指定配置文件可能是个好主意。尽管sRGB是默认的。
  • 我使用Ghostscript的修改后的def.ps,它将cmyk_des_renderintent.icc嵌入为“输出意图”。

您可以找到在这个实验中使用的所有文件这里。还有其他一些实验。我创造了他们,试图了解颜色管理如何在gs中工作。我希望他们能对这个问题有所了解。还有一个比较的Acrobat“转换颜色”工具。AFAIU,它做的和你期望的完全一样。

当涉及到用于pdf输出的颜色管理时,KenS (gs dev)通常是他说“pdfwrite设备会在输出中保持输入的颜色规格不变”。在这种情况下,他们似乎并没有真正关注从一个概要文件到另一个概要文件的转换。好吧..。这并不是“最需要的”功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31591554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档