limit - 封装的 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 将无法在包括 Adobe Illustrator 在内的任何 EPS 查看器上打开(操作无法完成,因为未知错误)。我尝试使用不同的图像来确保特定的图像没问题,我得到了相同的结果,只要我写 4 个图像(105825 行文件)一切正常。但是当我使用 5(132253 行文件)时它失败了。
我是否有可能超出 EPS 的最大线路限制?如果您想分析它们,这是有问题的文件:有效的文件 -> https://files.fm/u/bfn2d32m和无效的文件 -> https://files.fm/u /4gbybr3y
解决方案
PostScript 或 EPS 中没有“行数限制”,因此您无法达到此目的。
当我通过 Ghostscript 运行您的文件时,它会在 yImage 中引发错误 /undefined(我建议您使用适当的 PostScript 解释器而不是 Adobe 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
例如,这避免了您必须使用令牌进行缩放和翻译操作。
推荐阅读
- angular - Angular 7 Material Drag&Drop 与 ngFor 用于同一页面上的多个放置目标
- google-app-engine - 数据存储投影查询不返回结果
- cygwin - 如何将 ACS_variables 添加到 Cygwin?
- ios - 领域通知阻止性能
- php - 用户数据存储在数据库中,但用户未定向到电子邮件确认页面
- javascript - 为什么我需要在forloop中声明长度而不是直接使用呢?
- kotlin - doubleBinding 没有效果
- c# - “ECHO %foo%”与“%foo%”的环境变量值之间的差异
- node.js - Mongoose 查找与输入子串匹配的所有文档
- flex-lexer - 无法识别 yylex() 产生的错误