打印 PostScript 文件时出现纹理条纹
Posted
技术标签:
【中文标题】打印 PostScript 文件时出现纹理条纹【英文标题】:Texture stripe appears when printing a PostScript file 【发布时间】:2015-09-29 02:37:51 【问题描述】:我正在使用 PostScript 语言来描述一页均匀排列的点。这些点是600dpi
,这意味着一英寸有 600 个点。我用一位来表示 PostScript 中的每个点,1
表示空白,0
表示黑点。
我的以点为单位的 PostScript 文件:
%% SetPageSize
/setPageSize <</PageSize [595 842] >> setpagedevice def
setPageSize
%% Dot Code
gsave
/mm 2.834645 mul def
1 mm 1 mm translate
5.76 5.76 scale
48 48 1 [48 0 0 -48 0 48]
<
fff7ff7ff7ff
ffffffffffff
ffffffffffff
fdffffffffff
ffffffffff7f
ffffffffffff
ffffffffffff
ffffffffffff
fffff7ffffff
fffffffdffff
ffffffffffff
ffffffffffff
7ff7ff7ff7ff
ffffffffffff
ffffffffffff
ffffffffffff
ffffffffffff
ffffffffffff
fffefffffeff
ffffffffffff
f7ffffff7fff
ffffffffffff
ffffffffffff
ffffffffffff
7ff7ff7ff7ff
ffffffffffff
ffffffffffff
fffffffdffff
fffff7ffffff
ffffffffffff
ffbfffffffff
ffffffffffff
fffffffffff7
ffffffffffff
ffffffffffff
ffffffffffff
7ff7ff7ff7ff
ffffffffffff
ffffffffffff
ffffffffffff
f7ffffffffff
ffffffffffff
fffffffffffb
ffffffffffff
ffffffff7fff
7fffdfffffff
ffffffffffff
ffffffffffff
>
image
grestore
上面的代码代表一个点的单位,即2.03mm*2.03mm
in 600dpi。
translate
用于将用户空间移动到想要的位置,例如:
假设一个单元在(1mm, 1mm)
的位置。
它的右单元在(3.03mm, 1mm)
的位置。
它的上单元在(1mm, 3.03mm)
的位置。
scale
用于将输出dpi改为600,系数由72*48/600 = 5.76
计算。
矩阵48 48 1 [48 0 0 -48 0 48]
是垂直和水平扫描像素。
image
结构最后表示点的二进制值,用十六进制写。
这些点可以用 GhostScript 或 Adobe-Illustrator 打开,并在显示器上非常清晰地显示出来。
AI 中的样本点放大了 4800%。
但是打印的点出现纹理条纹。我使用的打印机是喷墨打印机Cannon ip2780和激光打印机FX DocuPrint CP105b。
600dpi(激光)的打印结果。垂直纹理条纹不如 800dpi 明显。
800dpi(激光)的打印结果。垂直纹理条纹更明显。 2,4,6 行比 1,3,5 行轻。但是点的密度应该相同。
800dpi(喷墨)的打印结果。出现水平和垂直纹理条纹。
有人可以帮助解释一下打印机的奇怪行为是如何发生的吗?或者我组成点的方式是错误的。
我可以使用translate
频繁移动用户空间,尤其是位置是浮点值(精度是否足够)?
我可以使用scale
手动将dpi更改为600。有什么方法可以更改输入dpi吗?
提前致谢!
【问题讨论】:
我唯一的猜测是你正在与内置的半色调机器作斗争。后记主要是为了抽象出实际的点。我不知道如何解决这个问题。 【参考方案1】:您看到的是信号的混叠,更准确地说是moiré pattern。发生的情况是您打印的点与打印机点阵(屏幕)不完全对齐。
不同的打印机具有不同的屏幕,您的像素与它们的对齐方式也不同。因此,有时您的点会分布在 2 个打印机像素上,有时则不会。如果你真的想这样做,那么如果你使用这种方法,每个设备都应该需要它自己的半色调图案。
进一步阅读:
Halftoning Article about halftones【讨论】:
【参考方案2】:joojaa 是对的,它是 600 到 800 dpi 之间的干涉图案。您需要找到更高分辨率的打印机或降低点阵图案的分辨率。尝试将图像数组 [48 0 0 -48 0 48] 中的数字 48 减少 5 或 10 步左右,然后再次打印直到图案消失,这将是您的打印机可以做的最好的事情。
【讨论】:
以上是关于打印 PostScript 文件时出现纹理条纹的主要内容,如果未能解决你的问题,请参考以下文章
使用 xgettext 和 msginit 生成 .po 文件时出现 msgfmt 错误