如何将img包含在postscript中

前端之家收集整理的这篇文章主要介绍了如何将img包含在postscript中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想将图像添加到我的postscript代码
%!PS-Adobe-3.0

/Times-Roman findfont
12 scalefont setfont

50 700 moveto
(text) show
showpage

但我不知道这样做.有人帮忙吗?

解决方法

; tldr

跳到中间并开始从Simpler Workflow读取到最后.

转换为xbm,使用vi进行hack,使用{currentfile}图像进行内联数据

它在Postscript语言参考手册中有记录,但信息可能有点难以消化.

正如肯所说,你需要使用图像操作符.我通常选择“旧学校”形式

width height bits-per-pixel matrix proc image ‐

对于某些随机图像文件,您通常希望使用像ImageMagick转换来获取文本格式.当然你也可以把它转换成eps,但要学习,你必须坚持下去.

% convert image.png image.xbm

这将为您提供如下文件

1 #define glasses_width 320
  2 #define glasses_height 240
  3 static char glasses_bits[] = {
  4   0x00,0x00,0x03,5   0x00,0x45,0x65,0xDB,0xB5,0x6F,0xBF,0xEF,6   0xFF,0xFF,0xED,0x3C,0xB3,0xAD,0xF6,7   0xE6,0x4A,0xAA,0xBA,0x02,8   0x00,0x99,0xA8,0x66,0xD6,9   0xDF,0xF9,0xF7,0xFD,0xFE,0x7F,0xFB,0xEA,10   0xDD,0x5A,0x9A,0x69,0xB9,0xBE,0x55,...
803   0x00,804   };

所以,在vi中,做一些像

:%s/^#/%#/         #comment-out the #defines
:g/[{}]/d          #delete the array brackets
:%s/0x//g          #remove the 0x prefixes
:%s/,//g          #remove the spaces

给这样的东西:

1 %#define glasses_width 320
  2 %#define glasses_height 240 
  3   000000000003000000000000
  4   000000004565DB65B56FBFEF
  5   FFFFFFBFB5ED3CBFB3DBADF6
  6   E64AAABA0000000000020000
  7   000000000000000099A866D6
  8   DFF9F7BFFFFDFFFEFF7FFBEA
  9   DD5A9A69B9BE556500000000
 10   000C00000000000000000000
...
802   000000000000000000000000

然后使用图像调用中的数字,修剪这些行,并在这些行之后直接插入数据

%width height depth [ x-scale x-skew y-skew y-scale x-offset y-offset ]=matrix 
320    240    1     [ 1       0      0      -1      0        240 ]
%  {proc-yielding-string-data}                  call(image)
   { currentfile 80 string readhexstring pop }  image

这假设您的位图数据y向下增加.只要您可以获得某种原始样本的转储,就可以针对其他ascii格式调整此方法.使用解码器代码嵌入压缩图像是一大堆蠕虫我建议你避免一段时间. (主要是因为我不知道该如何做到这一点.我一直在避免它像一个大的蠕虫.:D)

我检查了上面的建议,我忘记了一个很大的障碍. Postscript喜欢它在big-endian字节中的位图.也就是说,第7位是最左边,第0位是最右边的位.这与xbm格式相反.因此,上面介绍的完成程序是:

%!
%reverse the bits in a byte
/reverse {               % b
    dup 1 and            % b b0          % explode the bits
    1 index 2 and        % b b0 b1
    2 index 4 and        % b b0 b1 b2
    3 index 8 and        % b b0 b1 b2 b3
    4 index 16 and       % b b0 b1 b2 b3 b4
    5 index 32 and       % b b0 b1 b2 b3 b4 b5
    6 index 64 and       % b b0 b1 b2 b3 b4 b5 b6
    8 7 roll 128 and     % b0 b1 b2 b3 b4 b5 b6 b7
    -7 bitshift exch     % b0 b1 b2 b3 b4 b5 b7-7=0' b6  % shift and combine
    -5 bitshift or exch  % b0 b1 b2 b3 b4 b0'|b6-5=1' b5
    -3 bitshift or exch  % b0 b1 b2 b3 b0'|b1'|b5-3=2' b4
    -1 bitshift or exch  % b0 b1 b2 b0'|b1'|b2'|b4-1=3' b3
    1 bitshift or exch   % b0 b1 b0'|b1'|b2'|b3'|b3+1=4' b2
    3 bitshift or exch   % b0 b0'|b1'|b2'|b3'|b4'|b2+3=5' b1
    5 bitshift or exch   % b0'|b1'|b2'|b3'|b4'|b5'|b1+5=6' b0
    7 bitshift or        % b0'|b1'|b2'|b3'|b4'|b5'|b6'|b0+7=7'
} def

320 240 1  % width height bitdepth
[ 1 0 0 -1 0 240 ]  % 1-to-1 matrix with descending y,offset by max_y
{ %proc-yielding-string
    currentfile 80 string  % file string
    readhexstring pop  % string         read a line of hex data from THIS FILE
    0 1 2 index length 1 sub  % string 0 1 strlen-1
    {  % string index
        2 copy 2 copy  % str i str i str i
        get reverse    % str i str i rev(str_i)
        put  % str' i
        pop % str'                      % reverse each char (byte)
    } for                               % loop over chars in string
} image
  000000000003000000000000
  000000004565DB65B56FBFEF
  FFFFFFBFB5ED3CBFB3DBADF6
  E64AAABA0000000000020000
  000000000000000099A866D6
  DFF9F7BFFFFDFFFEFF7FFBEA
  ...

提供完整程序,附加完整的图像数据here.

工作流程更简单

更简单,但仍然是“手动”,是转换为pbm,它使用与postscript相同的位排序约定.然后xxd -ps将产生一个“postscript”hexdump.以下三个示例都使用以这种方式准备的十六进制数据.但是这种方法仍然需要你手动测量标题的长度(使用xxd来查找宽度和高度之后的whitespace-char之后的字节偏移量).

%!
% swar.ps
%
%image example
%image origin:  http://upload.wikimedia.org/wikipedia/commons/thumb/2/23/Spacewar%21-PDP-1-20070512.jpg/320px-Spacewar%21-PDP-1-20070512.jpg
%
% bash commands to prepare image file:
%
% $wget http://upload.wikimedia.org/wikipedia/commons/thumb/2/23/Spacewar%21-PDP-1-20070512.jpg/320px-Spacewar%21-PDP-1-20070512.jpg
% $identify 320px-Spacewar\!-PDP-1-20070512.jpg 
% $convert 320px-Spacewar\!-PDP-1-20070512.jpg spacewar.pbm
% $xxd -ps spacewar.pbm > spacewar.asc
% % gs swar.ps


/infile (spacewar.asc)(r)file def
/buf 256 string def

% use $xxd spacewar.pbm | head
% to find the length of the header and read that length
% into the buffer and discard,leaving only samples.
infile buf 0 16#5d getinterval readhexstring pop pop 

320 215 1
[ 1 0 0 -1 0 215 ]
{ infile buf readhexstring pop } image

showpage

spacewar.asc是裸十六进制样本的丑陋块.

$head spacewar.asc
50340a2346696c6520736f757263653a20687474703a2f2f636f6d6d6f6e
732e77696b696d656469612e6f72672f77696b692f46696c653a53706163
65776172212d5044502d312d32303037303531322e6a70670a3332302032
31350a007fffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffff007fffffffffffffffffffffffdfffffff
ffffffffffffffffffffffffffffffffffffffffffffff007fffffffffff
ffffffffffff803fffffffffffffffffffffffffffffffffffffffffffff
ffffff007ffffffffffffffffffffffff800ffffffffffffffffffffffff
ffffffffffffffffffffffffff007fffffffffffffffffffffff7fe007ff
ffffffffffffffffffffffffffffffffffffffffffffff007fffffffffff

只要解释器​​(或者蒸馏器)没有设置SAFER选项,这个样本块就可以留在外部,因为这会禁用文件访问操作符.

它也可以在图像调用之后使用如上所述的currentfile进行内联.

%!
/buf 256 string def

320 215 1
[ 1 0 0 -1 0 215 ]
{ currentfile buf readhexstring pop }
{ 
    infile buf 0 16#5d getinterval readhexstring pop pop  % discard header
    image 
} exec
50340a2346696c6520736f757263653a20687474703a2f2f636f6d6d6f6e
732e77696b696d656469612e6f72672f77696b692f46696c653a53706163
65776172212d5044502d312d32303037303531322e6a70670a3332302032
31350a007fffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffff007fffffffffffffffffffffffdfffffff
ffffffffffffffffffffffffffffffffffffffffffffff007fffffffffff
ffffffffffff803fffffffffffffffffffffffffffffffffffffffffffff
ffffff007ffffffffffffffffffffffff800ffffffffffffffffffffffff
ffffffffffffffffffffffffff007fffffffffffffffffffffff7fe007ff
ffffffffffffffffffffffffffffffffffffffffffffff007fffffffffff
%...

或者,只要数据小于64k,您就可以将其插入
一个字符串. [注意:这是字符串大小的历史实现限制.我被告知当前版本的ghostscript可以处理更大的字符串. ]如果您想重复使用多个图像,这非常有用
文档中的时间.

%!
/imgbuf 320 215 mul 8 div ceiling cvi string def   % create a string for byte storage (<64k)

{ 
    currentfile imgbuf 0 16#5d getinterval readhexstring pop pop  % read header
    currentfile imgbuf readhexstring pop pop                 % read data (discarding header data)
} exec
50340a2346696c6520736f757263653a20687474703a2f2f636f6d6d6f6e
732e77696b696d656469612e6f72672f77696b692f46696c653a53706163
65776172212d5044502d312d32303037303531322e6a70670a3332302032
31350a007fffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffff007fffffffffffffffffffffffdfffffff
ffffffffffffffffffffffffffffffffffffffffffffff007fffffffffff
ffffffffffff803fffffffffffffffffffffffffffffffffffffffffffff
ffffff007ffffffffffffffffffffffff800ffffffffffffffffffffffff
ffffffffffffffffffffffffff007fffffffffffffffffffffff7fe007ff
ffffffffffffffffffffffffffffffffffffffffffffff007fffffffffff
%...

320 215 1
[ 1 0 0 -1 0 215 ]
{ imgbuf }
image

我先前掩饰的那个位(矩阵参数)……

在上面的所有代码中,我对PLRM的解释采取了很大的自由.基本上忽略了一些常见的建议,因为它通常(根据我的经验)只是妨碍了解过程,但在这里……

使用图像操作符的推荐方法是使用与上面显示的不同类型的矩阵.矩阵实际上由图像运算符解释为逆映射.也就是说,为了扩大规模,你可以缩小数字,缩小规模可以使数字更大.你打算使用它的方式是(修改上面的最后一个例子,因为它是这个例子中最短和最好的因素,即假设imgbuf已经用readhexstring填充了上面的内容).
应该更恰当地写这个电话:

320 215 scale  % scale 1x1 image to proper dimensions
320 215 1          % "data" dimensions: w h bit-depth
[ 320 0 0 -215 0 215 ]              % inverse mapping
{ imgbuf }   % data-acquisition (yield data in a string)
image

也就是说,矩阵将图像反转(这里是一种“扭曲”,而不是技术意义上的)的意义,将图像转换为1单位X-1单位的正方形,这允许(要求)缩放坐标 – 系统获得图像的每像素1pt渲染.正确的方法为您提供了更大的灵活性:您现在可以使用320 215刻度线进行合理的缩放计算 – 如果您只想要1像素到1点的映射,则需要重复自己.

要使用正确的代码将图像的尺寸加倍,可以用640 430比例(或添加2 2比例)替换320 215比例.

320 215 scale
2 2 scale % == 640 430 scale
320 215 1                           % w h bit-depth
[ 320 0 0 -215 0 215 ]              % inverse mapping
{ imgbuf }   % data-acquisition
image

但是,以黑客的方式,你实际上必须将矩阵减半以获得增长的倒数. :d

320 215 1
[ .5 0 0 -.5 0 430 ] % "doubled,inverted (ie. halved) with double-offset" matrix
{ imgbuf }
image
原文链接:https://www.f2er.com/html/231740.html

猜你在找的HTML相关文章