Printing 使用maskdict在postscript中进行图像掩蔽
我是后记新手,请耐心听我说。 我试图用maskdict屏蔽一幅图像,这样当我把这幅图像放在“showpage”之前时,我就可以创建一个混合水印效果。我在postscript中提到了解更多有关此功能的信息。不幸的是,我无法想出一个简单的工作示例 如果我能得到一个简单的工作示例,使用“ImageType 3和InterleaveType 3”以及maskdict,这将非常有帮助,这样我就可以在此基础上进行构建Printing 使用maskdict在postscript中进行图像掩蔽,printing,postscript,printers,Printing,Postscript,Printers,我是后记新手,请耐心听我说。 我试图用maskdict屏蔽一幅图像,这样当我把这幅图像放在“showpage”之前时,我就可以创建一个混合水印效果。我在postscript中提到了解更多有关此功能的信息。不幸的是,我无法想出一个简单的工作示例 如果我能得到一个简单的工作示例,使用“ImageType 3和InterleaveType 3”以及maskdict,这将非常有帮助,这样我就可以在此基础上进行构建 提前感谢。这里是一个例子。这是从/ghostpdl/lib/image-qa.ps中随Gh
提前感谢。这里是一个例子。这是从/ghostpdl/lib/image-qa.ps中随Ghostscript分发的一组更完整的示例中提取出来的,其中包括对类型1、3和类型4图像的测试 这意味着它不是最简单的示例,但它应该足以让一个有能力的PostScript程序员理解或进一步简化
%!PS
/WidthRGB 83 def
/HeightRGB 89 def
/SX 036 def
/SY 037 def
/XA 060 def
%
% Procedure to generate test mask data
%
% WM and HM must be defined prior to invocation
% MaskGen -
%
% The mask data is stored into a string named /MaskData
%
% The mask consists of a "target". Bits past width WM are
% filled with 1's to make sure that pad bits are ignored.
%
/MaskGen {
/H8 HM 8 div def
/X0 WM 2 div def
/Y0 HM 2 div def
/WB WM 7 add 8 div cvi def
/MaskData WB HM mul string def
/MB [ 128 64 32 16 8 4 2 1 ] def
0 1 HM 1 sub {
/Y exch def
0 1 WB 1 sub {
/B exch def % byte within the row
/C B Y WB mul add def
/P 0 def
0 1 7 {
/b exch def % bit within the character
/X b B 8 mul add def
X WM lt
{ X Y eq
X HM 1 sub Y sub eq or
Y Y0 gt X X0 sub abs 2 le and or
X X0 sub WM div dup mul Y Y0 sub HM div dup mul add sqrt 9 mul cvi 2 mod 1 eq or
}
{ true } % pad bits are always set
ifelse
% stack: true if pixel is set
{
MB b get P or /P exch def
} if
} for % Bits within a byte
MaskData C P put
} for % Bytes within the row
} for % Rows in the mask
} bind def % MaskGen
% -----------------------------------------------------------------------
% -----------------------------------------------------------------------
%
% Procedures for ImageMatrix creation
/IMLRTB { [ WD 0 0 HD neg 0 HD ] } def
% Procedure to generate image data
%
% WD and HD must be defined prior to invocation
% { proc } ImageGen -
%
% The procedure is called once for each pixel
% Local definitions are R, G, B, X and Y
% Example: Generate RGB Chunky pixel data (single data source) BPC = 8
% /WD WidthRGB def
% /HD HeightRGB def
% /RGBData WD HD mul 3 mul string def
% { X Y WD mul add 3 mul RGBData
% dup 2 index R 255 mul cvi put
% dup 2 index 1 add G 255 mul cvi put
% exch 2 add B 255 mul cvi put
% } ImageGen
/ImageGen {
gsave
0 1 HD 1 sub {
/Y exch def
0 1 WD 1 sub {
/X exch def
/D X WD 2 div sub WD div dup mul Y HD 2 div sub HD div dup mul add sqrt def
/D D .6 div def
/A X WD 2 div sub Y HD 2 div sub atan 360 div def
A % Hue
.7 D .3 sub .60 div sub % Saturation
dup 0.05 lt
{ .95 D .8 sub 3 mul sub 3 mul cvi 3 div sqrt } % Level once Saturation < 0
{ .7 D .25 sub .75 div add } % Level inside
ifelse
X WD 2 div gt Y HD 2 div sub abs 2 le and { pop 0 } if % asymmetric marker
sethsbcolor
currentrgbcolor /B exch def /G exch def /R exch def
dup exec
} for
} for
pop % discard the procedure
grestore
} bind def
% -----------------------------------------------------------------------
%
% Procedures to use generated string data as procedure or files
/WD WidthRGB def
/HD HeightRGB def
/sM WidthRGB 2 mul 1 sub string def % long enough to hold more than one mask line
/sD WidthRGB 7 mul 1 sub string def % long enough to hold more than one 12 bit RGB line
% worst case is 12bit ImageType3 InterleaveType 1 == 48 bits
/MaskDProc {
/FM MaskData dup length () /SubFileDecode filter def
{ { FM sM readstring pop } }
} bind def
/MaskDFile {
MaskData dup length () /SubFileDecode filter
/MDF 1 index def
} bind def
/RGBDProc {
/FD RGBData dup length () /SubFileDecode filter def
{ { FD sD readstring pop } }
} bind def
/RGBDFile {
RGBData dup length () /SubFileDecode filter
/RGBDF 1 index def
} bind def
% YY, SX, SY, W, HD (Data) WM, HM (Mask) should be defined prior to invocation
% (IT is InterleaveType)
% X Y BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
%
/DoImage3 {
gsave
/DeviceRGB setcolorspace
/IT exch def
/DD exch def
/DM exch def
/MS exch def
/S exch def % May be an array of sources - For InterleaveType 3
% S[0] is the Mask DataSource
/M exch def
/BPC exch def
/XX 1 index def
YY translate SX SY scale
0 setlinewidth 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto 0 0 lineto stroke
/DataImage
<<
/ImageType 1
/Width WD
/Height HD
/ImageMatrix M
/MultipleDataSources MS
/DataSource IT 3 ne { S } { S 1 get exec } ifelse
/BitsPerComponent BPC
/Decode DD
>>
def
/MaskImage
<<
/ImageType 1
/Width WM
/Height HM
/ImageMatrix % construct the mask matrix using signs from the DataImage matrix
/M0 M 0 get WD abs div cvi def
/M3 M 3 get HD abs div cvi def
/M4 M 4 get WD abs div cvi def
/M5 M 5 get HD abs div cvi def
[ WM M0 mul 0 0 HM M3 mul WM M4 mul HM M5 mul ]
IT 3 eq {
/DataSource S 0 get exec % DataSource only allowed for InterleaveType 3
} if
/BitsPerComponent IT 1 eq { BPC } { 1 } ifelse
/Decode DM
>>
def
<<
/ImageType 3
/DataDict DataImage
/MaskDict MaskImage
/InterleaveType IT
>>
image
grestore
} bind def
% ----------------------------------------------------------------------
% InterleaveType 3, BPC==8, WM=WD, HM=HD
% IT 3 is line interleave -- Mask and Data in separate sources
% RGB Image Data chunky (MultipleDatasources==false).
/YY 50 def
% Generate the MaskData first
/WM WD def
/HM HD def
MaskGen
% Generate the Data Image
/RGBData WD HD mul 3 mul string def
{ X Y WD mul add 3 mul RGBData
dup 2 index R 255 mul cvi put
dup 2 index 1 add G 255 mul cvi put
exch 2 add B 255 mul cvi put
} ImageGen
50 8 IMLRTB [ MaskData RGBData ] false [0 1] [1 0 1 0 1 0] 3 DoImage3
% ----------------------------------------------------------------------
showpage
%!附言
/宽度RGB 83 def
/高度RGB 89 def
/SX 036 def
/SY 037 def
/XA 060 def
%
%生成测试掩码数据的步骤
%
%WM和HM必须在调用之前定义
%面具-
%
%掩码数据存储在名为/MaskData的字符串中
%
%遮罩由一个“目标”组成。超过宽度WM的位是
%填充1以确保忽略焊盘位。
%
/面具{
/H8 HM 8分区def
/X0 WM 2分区def
/Y0 HM 2分区def
/WB WM 7添加8分区cvi def
/MaskData WB HM多字符串定义
/MB[128 64 32 16 8 4 2 1]def
0 1 HM 1接头{
/Y exch def
0 1 WB 1子系统{
/B exch def%行中的字节
/C B Y WB mul添加def
/p0def
0 1 7 {
/b字符中的exch def%位
/X b 8多个添加def
X-WM-lt
{X Y eq
X HM 1子模块Y子模块均衡器或
Y Y0 gt X X0子abs 2 le和或
X X0子WM div dup mul Y Y0子HM div dup mul添加sqrt 9 mul cvi 2 mod 1 eq或
}
{true}始终设置%pad位
如果有
%堆栈:如果设置了像素,则为真
{
MB b获取P或P exch def
}如果
}对于字节内的%位
maskdatacpput
}对于行中的%Bytes
}对于掩码中的%行
}绑定定义%MaskGen
% -----------------------------------------------------------------------
% -----------------------------------------------------------------------
%
%ImageMatrix创建过程
/IMLRTB{[WD 0 HD neg 0 HD]}def
%生成图像数据的过程
%
%必须在调用之前定义WD和HD
%{proc}ImageGen-
%
%该过程对每个像素调用一次
%局部定义为R、G、B、X和Y
%示例:生成RGB块状像素数据(单个数据源)BPC=8
%/WD宽度RGB def
%/HD高度RGB def
%/RGBData WD HD mul 3 mul字符串定义
%{X Y WD mul添加3 mul RGB数据
%dup 2索引R 255多个cvi输出
%dup 2索引1添加G 255 mul cvi put
%exch 2添加B 255多个cvi put
%}ImageGen
/ImageGen{
gsave
01高清1分{
/Y exch def
0 1 WD 1接头{
/X exch def
/D X WD 2 div sub WD div dup mul Y HD 2 div sub HD div dup mul add sqrt def
/D.6分区def
/X WD 2分区接头Y HD 2分区接头或360分区def
百分之一色调
.7 D.3低于60 div低于%饱和度
dup 0.05 lt
{.95 D.8 sub 3 mul sub 3 mul cvi 3 div sqrt}一旦饱和<0
{.7 D.25 sub.75 div add}%内部级别
如果有
X WD 2 div gt Y HD 2 div sub abs 2 le和{pop 0}如果%不对称标记
色
当前RGB颜色/B exch def/G exch def/R exch def
dup执行
}为了
}为了
pop%放弃该过程
格雷斯托
}绑定def
% -----------------------------------------------------------------------
%
%将生成的字符串数据用作过程或文件的过程
/WD宽度RGB def
/高清高度RGB def
/sM WidthRGB 2 mul 1子字符串定义%长度足以容纳多条屏蔽线
/sD WidthRGB 7 mul 1子字符串定义%长度足以容纳多条12位RGB线
%最坏的情况是12位ImageType3交织类型1==48位
/MaskDProc{
/FM MaskData dup长度()/子文件解码筛选器定义
{{FM sM readstring pop}}
}绑定def
/MaskDFile{
MaskData dup length()/子文件解码筛选器
/MDF 1索引定义
}绑定def
/RGBDProc{
/FD RGBData dup length()/子文件解码过滤器def
{{FD sD readstring pop}}
}绑定def
/RGB文件{
RGBData dup length()/子文件解码过滤器
/RGBDF 1索引定义
}绑定def
%YY、SX、SY、W、HD(数据)WM、HM(掩码)应在调用之前定义
%(它是交错式的)
%X Y BPC矩阵源多MaskDecode数据解码它DoImage3-
%
/DoImage3{
gsave
/DeviceRGB集合颜色空间
/它是exch def
/DD exch def
/DM exch def
/戴夫女士
/S exch def%可能是源数组-用于交织类型3
%S[0]是掩码数据源
/M exch def
/BPC exch def
/XX 1索引定义
YY翻译SX SY量表
0设置线宽0 0移动到1 0线条到1 1线条到0 1线条到0 0线条到笔划
/数据图像
>
def
/伪装
>
def
>
形象
格雷斯托
}绑定def
% ----------------------------------------------------------------------
%交织类型3,BPC==8,WM=WD,HM=HD
%它是行交织——掩码和数据在不同的源中
%RGB图像数据块(MultipleDatasources==false)。
/YY 50 def
%首先生成MaskData
/WM WD def
/HM HD def
图片颜色转换
%生成数据图像
/RGBData WD HD mul 3 mul字符串定义
{X Y WD mul添加3 mul RGB数据
dup 2索引R 255多个cvi输出
dup 2索引1添加G 255 mul cvi put
exch 2添加B 255多个cvi put
}ImageGen
50 8 IMLRTB[MaskData RGBData]false[0 1][1 0 1 0]3 DoImage3
% ----------------------------------------------------------------------
展示页