2015-05-20 2 views
0

Я только начинаю изучать постскриптум, и я работал над созданием PDF-файла (который должен быть в CMYK) и вставки изображения.Как вставить изображение CMYK в PDF с помощью постскриптума

Тем не менее, я искал в Интернете и загружал как можно больше руководств Postscript без простого примера этого (пожалуйста, исправьте меня, если я пропустил какой-либо).

Итак, моя проблема в том, что у меня есть изображение CMYK, и я хотел бы, чтобы он был встроен в мой PDF-файл. Однако, когда я вставляю его, используя простой пример, основанный на изображении RGB, изображение получается отрицательным (я изменил то, что, как я думал, будет подходящим для изображения CMYK)

Ниже приводится то, что я использую в качестве моего создания PDF.

%! 
/Times-Roman findfont 14 scalefont setfont 
<< /PageSize [419.528 595.276] >> setpagedevice 
% MM to Units 
% [ W x H ] 
/DeviceCMYK setcolorspace 
% Page 1 

% 
% Set the Original to be the top left 
% 
0 595.276 translate 
1 -1 scale 
gsave 
% 
% Save this state before moving x y specifically for images 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% Image 1 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

% set the X and Y of the mask here 
-8.5039 140.21007874 translate %Top Left Coordinates of mask 

/box { 
    newpath 
    moveto 

    436.535433071 0 rlineto % width of the mask 
    0 463.569448819 rlineto % height of the mask %Top Left Coordinates 
    -436.535433071 0 rlineto 

    closepath 
} def 

0 0 box    % Set up our box 
    clip      % Clip to the box 

% DO NOT reset the document to original position 
% as we want the translate to be relative to the clipped box 
% 
%grestore * Do not use here 
%gsave * Do not use here 
% 

%% Images when flipped to draw correctly are scaled UPWARDS 
%% so you need to move the x,y position to the bottom left 

-1.44 621.714330709 translate % Bottom Left Cordinates 

% unset the mirror or the image will be flipped! 
1 -1 scale 

% scale the image 
438.000944882 657.119055118 scale %%% Need to work out size and width into Units 

1825     % number of columns per row %width of the image %%%% IN PIXELS! 
2738     % number of rows %height of the images %%%% IN PIXELS! 

8     % bits per color channel (1, 2, 4, or 8) 
[1825 0 0 -2738 0 2738]  % transform array... maps unit square to pixel 
(cmyk_image.jpg) (r) file /DCTDecode filter % opens the file and filters the image data 
false     % pull channels from separate sources 
4 
colorimage 

%%%%% 
% End of Image 1 
%%%%% 

showpage 

Я пытался смотреть на viewjpeg.ps, но я хочу, чтобы иметь изображение, вставленный в PS и не вставленный в командной строке.

Большое спасибо

Edited: Изображение в вопросе :) (это через wetransfer из-за его размера и Cmyk цветовом)

cmyk_image.jpg

Edited Опять:

Я отрегулирован код снова, используя словарь (на основе вашего сообщения KenS Simple Image Dictionary).

<< /PageSize [419.528 595.276] >> setpagedevice 
0 595.276 translate 
1 -1 scale 

-1.44 621.714330709 translate % Bottom Left Cordinates 

% unset the mirror or the image will be flipped! 
1 -1 scale 

% scale the image 
438.000944882 657.119055118 scale %%% Need to work out size and width into Units 

/OneComponentString (cmyk_image.jpg) (r) file /DCTDecode filter def 

/OneComponentImage1 
{ 
<< 
/ImageType 1 
/Width 1825 
/Height 2738 
/ImageMatrix [1825 0 0 -2738 0 2738] 
/BitsPerComponent 8 
/DataSource OneComponentString 
>> 
} bind def 

gsave 

/DeviceCMYK setcolorspace 
OneComponentImage1 image 
grestore 
showpage 

Однако она по-прежнему идет вверх отрицательный (Я explicily leftout в/Decode [0 1] из словаря, как это было подбрасывая следующее сообщение об ошибке:

Error: /rangecheck in --image-- 
Operand stack: 
    --dict:7/7(L)-- 
Execution stack: 
    %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 1951 1 3 %oparray_pop 1950 1 3 %oparray_pop 1934 1 3 %oparray_pop 1820 1 3 %oparray_pop --nostringval-- %errorexec_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- 1847 1 3 %oparray_pop 
Dictionary stack: 
    --dict:1183/1684(ro)(G)-- --dict:0/20(G)-- --dict:80/200(L)-- 
Current allocation mode is local 
Last OS error: Invalid argument 

Так что, я думаю, Я становлюсь ближе. может кто-нибудь объяснить варианты Decode и почему он может бросить ошибку при использовании CMYK изображения?

Большого спасибо.

ответ

1

Вы на самом деле не сказал, который руководство вы используете, поэтому его сложно предложить другим.

Первое, что я хотел бы отметить, это то, что вы используете colorimage, вы, вероятно, хотите прекратить это делать и вместо этого использовать форму словаря оператора изображения, что намного более гибко. Также будет полезно, если вы захотите попробовать другие типы изображений, которые только имеют форму словаря. Оператор colorimage в основном является неприятным взломом из дней между уровнем 1 и уровнем 2 PostScript.

Правильно ли работает viewjpeg.ps с вашим файлом JPEG? Если это так, вы можете использовать его в качестве шаблона (обратите внимание, что viewjpeg.ps использует форму словаря оператора изображения).

Кстати, вы захотите быть осторожным с настройками pdfwrite, если вы планируете использовать JPEG в качестве источника данных изображения, если вы не измените ColorImageFilter, тогда pdfwrite применит сжатие JPEG к выбранному образцу. Данные сжатия JPEG, которые ранее были сжаты JPEG, приводят к заметной потере качества.

Что касается инверсии, я бы предположил, что образцы, возвращенные из изображения JPEG, просто перевернуты относительно цветовой модели PostScript CMYK (0 = 0% colourant, 255 = 100% colourant). Очевидно, я не могу сказать, не видя файл jpeg.

+0

Привет, Кен, Спасибо за этот ответ. Руководства, которые у меня есть: https://www.adobe.com/products/postscript/pdfs/PLRM.pdf http://www-cdf.fnal.gov/offline/PostScript/BLUEBOOK.PDF https: //staff.science.uva.nl/ajpheck/Courses/Mastercourse2005/tutorial.pdf Если у вас есть больше указателей, которые были бы потрясающими! Да viewjpeg действительно работает - я думаю, что моя проблема в том, что мне трудно упростить этот скрипт. Благодарим вас за отзыв о сжатии. Сцену нужно будет помнить для изображений с высоким разрешением (300 dpi). Я посмотрю, смогу ли я предоставить вам изображение, о котором я говорю. – MissAran

+0

Ну, красные и синие книги - отличная отправная точка, вам может понравиться смотреть черно-белую книгу, если вы планируете делать что-либо со шрифтами (это определенно не требуется). Если вы планируете работать с PDF, то стоит упомянуть Справочник по PDF или его версию ISO. Кроме того, не руководство, а рекомендация, посмотрите сайт Acumen Training и журнал Acumen. Отличный ресурс для PostScript и PDF. http://www.acumentraining.com/acumenjournal.html – KenS

0

Благодаря KenS, я смог получить изображение CYMK в 300 DPI.

<< /PageSize [419.528 595.276] >> setpagedevice 
    % [ W x H ] 
    /DeviceCMYK setcolorspace 
    % Page 1 

    % 
    % Set the Original to be the top left 
    % 
    0 595.276 translate 
    1 -1 scale 
    gsave 


    %% Images when flipped to draw correctly are scaled UPWARDS 
%% so you need to move the x,y position to the bottom left 

-1.44 621.714330709 translate % Bottom Left Cordinates 

% unset the mirror or the image will be flipped! 
1 -1 scale 

% scale the image 
438.000944882 657.119055118 scale %%% Need to work out size and width into Units 


/Image1File (cmyk_image.jpg) (r) file /DCTDecode filter def 

/Image1 
{ 
<< 
    /ImageType 1 
    /Width 1825 
    /Height 2738 
    /ImageMatrix [1825 0 0 -2738 0 2738] 
    /BitsPerComponent 8 
    /Decode [1 0 1 0 1 0 1 0] % can either be 1 0 or 0 1 
    /DataSource Image1File 
>> 
} bind def 

/DeviceCMYK setcolorspace 
Image1 image 

% Reset to previous X and Y (line 13) 
grestore 
gsave 

showpage 

Затем я выполняю это из командной строки.

gs -o output.pdf -sDEVICE=pdfwrite -dColorConversionStrategy=/LeaveColorUnchanged -dEncodeColorImages=false -dEncodeGrayImages=false -dEncodeMonoImages=false input.ps 
Смежные вопросы