Максимальный предел строки в инкапсулированном poscript - PullRequest
0 голосов
/ 06 ноября 2018

Я думаю, что я превышаю пределы линии EPS max: Я генерирую 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

Таким образом, дело в том, что если я записываю до 4 изображений в EPS, все работает нормально, но когда я пытаюсь написать 5-е, eps не откроется ни в одном средстве просмотра EPS, включая Adobe Illustrator (операция не может быть завершена, потому что неизвестной ошибки). Я пытался использовать разные изображения, чтобы убедиться, что с определенными изображениями все в порядке, и я получил тот же результат, пока я пишу 4 изображения (файл 105825 строк), все работает. Но когда я использую 5 (132253 файла строки), это терпит неудачу.

Возможно ли, что я превышаю максимальный предел линии для EPS? Вот эти файлы, если вы хотите проанализировать их: тот, который работает -> https://files.fm/u/bfn2d32m и тот, который не работает -> https://files.fm/u/4gbybr3y

1 Ответ

0 голосов
/ 06 ноября 2018

В PostScript или EPS нет «ограничения строки», поэтому вы не можете его использовать.

Когда я запускаю ваш файл через Ghostscript, он выдает ошибку / не определено в yImage (я бы посоветовал вам отлаживать PostScript, используя правильный интерпретатор PostScript, а не Adobe Illustrator).

Это наводит меня на мысль, что одно из ваших изображений использует больше данных, чем вы предоставили, поэтому интерпретатор запускает конец данных, потребляя части программы, пока не прочитает достаточное количество байтов из текущего файла, чтобы удовлетворить запрос , В этот момент начинается обработка файла как PostScript снова, но указатель файла теперь указывает на «yImage» следующего «DisplayImage». Поскольку вы не определили ключ «yImage», естественно, это дает вам «неопределенную» ошибку.

Судя по вашему описанию, это может быть 4-е изображение, поскольку добавление 5-го приводит к ошибке. Обратите внимание, что если ваша программа завершает работу без предоставления достаточного количества данных (таким образом, интерпретатор достигает EOF), то предоставленные данные будут отрисованы. Таким образом, может выглядеть , как будто ваше 4-е изображение является правильным, даже если оно не соответствует действительности, если за ним не следует никакой дополнительный программный код.

примечание стиля; PostScript - это язык, основанный на стеке, поэтому обычно нужно помещать значения в стек и читать их оттуда вместо выполнения оператора 'token'.

Таким образом, ваш ввод будет больше похож на:

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

Это позволяет вам вообще не использовать токен для операций масштабирования и перевода.

...