首页 > 解决方案 > 封装的 poscript 最大行数限制

问题描述

我认为我超出了 EPS 最大行数限制:我正在以编程方式生成一个由图片网格组成的 eps。我的 EPS 具有以下结构:

%!PS-Adobe-3.0 EPSF-3.0
.
.
%%BeginProlog
%%EndProlog
%%Page: 1 1
%%Begin Raster Image. Index: 0
save
449 2576 translate
0 rotate
-282 -304 translate
[1 0 0 1 0 0] concat
0 0 translate
[1 0 0 1 0 0] concat
0 0 translate
userdict begin
DisplayImage
0 0
564 608
12
564 608
0
0

FBDBB9FBDCBCFDDBBAFFD8B2FFD7A9FED4A1FCD29CFDD09EFED0A2FFD0A6FFCDA3FFCBA0FFCBA0...
EED79CEBD09CEDD19EEED2A1EFD3A3F0D4A5F0D4A6F0D4A7F1D4A4F3D4A0F3D49F
end
restore
%%End Raster Image
%%Begin Raster Image. Index: 1
.
.
end
restore
%%End Raster Image
%%Begin Raster Image. Index: 2
etc

所以问题是,如果我向 EPS 写入最多 4 个图像,一切正常,但是当我尝试写入第 5 个图像时,eps 将无法在包括 Adob​​e Illustrator 在内的任何 EPS 查看器上打开(操作无法完成,因为未知错误)。我尝试使用不同的图像来确保特定的图像没问题,我得到了相同的结果,只要我写 4 个图像(105825 行文件)一切正常。但是当我使用 5(132253 行文件)时它失败了。

我是否有可能超出 EPS 的最大线路限制?如果您想分析它们,这是有问题的文件:有效的文件 -> https://files.fm/u/bfn2d32m和无效的文件 -> https://files.fm/u /4gbybr3y

标签: limiteps

解决方案


PostScript 或 EPS 中没有“行数限制”,因此您无法达到此目的。

当我通过 Ghostscript 运行您的文件时,它会在 yImage 中引发错误 /undefined(我建议您使用适当的 PostScript 解释器而不是 Adob​​e Illustrator 来调试 PostScript)。

这向我表明,您的一个图像使用的数据多于您提供的数据,因此解释器运行数据的末尾,消耗程序的一部分,直到它从 currentfile 读取足够的字节来满足请求。此时开始再次将文件作为 PostScript 处理,但文件指针现在指向下一个“DisplayImage”的“yImage”。由于您尚未定义“yImage”键,因此这自然会给您一个“未定义”错误。

根据您的描述,这似乎是第 4 张图片,因为添加第 5 张会引发错误。请注意,如果您的程序在没有提供足够数据的情况下终止(因此解释器到达 EOF),则将绘制提供的数据。所以看起来你的第四张图片是正确的,即使它不是正确的,只要它后面没有任何进一步的程序代码。

样式说明;PostScript 是一种基于堆栈的语言,因此通常会通过将值压入堆栈并从那里读取它们来进行,而不是执行“令牌”运算符。

所以你的输入会更像:

0 0
564 608
12
564 608
0
0
DisplayImage
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
...

DisplayImage 代码将是:

/DisplayImage
{
    %
    % Display a DirectClass or PseudoClass image.
    %
    % Parameters:
    %   x & y translation.
    %   x & y scale.
    %   label pointsize.
    %   image label.
    %   image columns & rows.
    %   class: 0-DirectClass or 1-PseudoClass.
    %   compression: 0-none or 1-RunlengthEncoded.
    %   hex color packets.
    %
    gsave
    /buffer 512 string def
    /byte 1 string def
    /color_packet 3 string def
    /pixels 768 string def

    /compression exch def
    /class exch def
    /rows exch def
    /columns exch def
    /pointsize exch def
    scale
    translate

例如,这避免了您必须使用令牌进行缩放和翻译操作。


推荐阅读