【问题标题】:How do I convert CMYK (tiff) file in postscript file?如何在 postscript 文件中转换 CMYK (tiff) 文件?
【发布时间】:2019-04-05 18:24:51
【问题描述】:

出于测试目的,我想从 Tiff 文件创建一个 postscript 文件。图像处于 CMYK 模式,我不想将其转换为 RGB。

我在 Windows 上,并使用 Ghostscript 查看 postscript 文件。我尝试使用 colorimage 运算符从以十六进制编码的图片中绘制彩色图像。


3508 2480 scale
3508 2480 8 [3508 0 0 -2480 0 2480]
{currentfile 4 3508 mul string readhexstring pop} bind
false 4 colorimage
49492a00080000001200fe00040001000000000000000001030001000000

-- More Hex Data --

我希望这可以用 ghostscript 编译,但它返回一个我无法理解的错误。

Error: /undefined in ??3
Operand stack:

Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
  --nostringval--   --nostringval--   false   1   %stopped_push   2045   1   3   %oparray_pop   2044   1   3   %oparray_
pop   2025   1   3   %oparray_pop   1884   1   3   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostr
ingval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:973/1684(ro)(G)--   --dict:0/20(G)--   --dict:78/200(L)--
Current allocation mode is local
Current file position is 4
GPL Ghostscript 9.26: Unrecoverable error, exit code 1


编辑: 所以我成功地提取了一个小图像的原始二进制数据进行测试,这要归功于 Photoshop,我想用每种颜色的每个数据源创建图像,所以一个源用于青色,一个用于洋红色,......我得到了这个文件:

/cyan { 
zz!!*'!s8W-!s8W-!zz!!*'!s8W-!s8W-!zz!!*'!s8W-!s8W-!zz!!*'!s8W-!s8W-!
  -- More Data --
} /ASCII85Decode filter def

/magenta {
s8W-!s8W-!s8N'!zzs8W-!s8W-!s8N'!zzs8W-!s8W-!s8N'!zzs8W-!s8W-!s8N'!
  -- More Data --
} /ASCII85Decode filter def

/yellow {
s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
  --More Data--
} /ASCII85Decode filter def

/black{
s8W-!s8W-!s8N'!zzs8W-!s8W-!s8N'!zzs8W-!s8W-!s8N'!zzs8W-!s8W-!s8N'!
  --More Data--
} /ASCII85Decode filter def

/DeviceCMYK setcolorspace

20 20 8 [20 0 0 20 0 0]
cyan
magenta
yellow
black
true 4 colorimage

如果你想要完整的代码来测试它:https://pastebin.com/6MFtw0M0

但 Ghostscript 不断向我返回一个神秘的错误:

Error: /undefined in --colorimage--
Operand stack:

Execution stack:
   %interp_exit   .runexec2   --nostringval--   colorimage   --nostringval--   2   %stopped_push   --nostringval--   col
orimage   colorimage   false   1   %stopped_push   2045   1   3   %oparray_pop   2044   1   3   %oparray_pop   2025   1
  3   %oparray_pop   1884   1   3   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   colo
rimage   --nostringval--   2   %stopped_push   --nostringval--   1913   10   3   %oparray_pop
Dictionary stack:
   --dict:973/1684(ro)(G)--   --dict:0/20(G)--   --dict:82/200(L)--
Current allocation mode is local
GPL Ghostscript 9.26: Unrecoverable error, exit code 1

编辑2: 所以我的文件数据不正确我尝试使用不同的文件并且它有效!

【问题讨论】:

    标签: postscript cmyk


    【解决方案1】:

    由于您没有(也不能)在此处发布整个程序,因此无法准确告诉您出了什么问题。猜测您的字节数计算不正确,因此 Ghostscript 会过早(并尝试解释图像数据)或过晚进行解释并且无法理解损坏的内容。

    很可能(从错误中)它试图解释图像数据,它试图告诉您二进制值 0x03 未定义为运算符或过程或名称。

    这可能是因为您刚刚直接从 TIFF 文件中读取数据并将其存储到数据流中。你不能那样做,TIFF 是一种文件格式,它有标题和标签,而且数据可能会被压缩。 colorimage 运算符希望您提供图像组件。

    在提交数据之前,您需要剥离标题和标签,可能解压缩数据流,处理偏移量等。

    This answer 有一个指向 Google 组的链接,其中包含我前段时间编写的用于读取 TIFF 文件的 PostScript 程序。老实说,我不记得它是否会读取 CMYK TIFF 文件,但至少它会给你一些关于正在发生的事情的线索。我确信可以修改该程序以读取 CMYK TIFF 文件,如果它还没有这样做的话。

    您可以使用 ps2write 设备通过 Ghostscript 运行该程序(将其指向您的 TIFF 文件),它将为您生成一个包含 CMYK 图像的 PostScript 文件。

    否则,您可以自己将图像组件提取为原始二进制数据,然后使用现有的 PostScript 将其包装起来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-19
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多