我在将PS文档呈现为TIFF(或任何栅格格式)时遇到问题。单个像素具有在下方一个像素渲染的“阴影”。有什么方法可以阻止这种情况吗?
%!PS-Adobe-2.0 EPSF-2.0
%%BoundingBox: 0 0 10 10
<< /PageSize [10 10] >> setpagedevice
1 1 scale
/singlepx {
newpath
5 5 moveto
0 1 rlineto
1 0 rlineto
0 -1 rlineto
closepath
setrgbcolor
fill
} def
0.666 0.0 0.666 singlepx
渲染命令:
gs -dSAFER -dNOPAUSE -dBATCH -dFitPage -dGraphicsAlphaBits=4 \
-g10x10 -r600 -sDEVICE=tiffgray -sOutputFile=test.tif test.eps
结果与png和jpeg输出设备相同。
答案 0 :(得分:1)
你设置了GraphicsAlphaBits = 4,这确实是'抗锯齿。结果是每个绘制的对象进一步延伸了几个像素,这些像素由背景组成。
如果仔细观察Evince输出,你会发现渲染的“单个像素”远不止这些。 rectangulsr形状有3边的边界,1像素宽。颜色是矩形的颜色,50%由背景组成。在角落处,它们被组成两次,结果是你获得了25%的颜色。
如果要绘制像素级别,则无法使用GraphicsAlphaBits。
请注意,无论如何,您并没有绘制到单个“像素”。您的矩形是一个PostScript单位宽1个单位高。 PostScript的单位是1/72英寸。所以在72 dpi是的,它是1像素,但以1440 dpi渲染,即20像素乘20像素。
[编辑]
嗯,我认为这里的问题是您使用的是不兼容的命令行开关和PostScript控件。首先,您的EPS文件无效,因为它包含一个setpage设备,这对于EPS来说是不合法的。
您的命令行将分辨率设置为600 dpi,输出大小设置为10x10 像素。在600 dpi时,使介质尺寸为1/60平方英寸。但是,您还设置了-dFitPage。这样做是拦截来自输入数据流的MediaSize请求,找出使所请求的媒体适合实际媒体所需的比例因子,然后缩放内容以使其适合实际媒体大小。
因为'EPS'设置了媒体大小,Ghostscript正在执行一些缩放,以使请求的10x10单位正方形适合10x10像素的正方形。现在-g和-dFitPage都在执行缩放操作,并且执行此操作的准确性有限。
问题进一步复杂化的事实是PostScript渲染规则是“像素的任何部分”,因此如果缩放/准确性应该以这样的方式解决,即从用户空间到设备空间的映射不会精确匹配设备空间像素网格,一个像素可能被视为(几乎没有)触摸,因此将被渲染。
你实际上想要实现的目标是什么?解决这个问题可能比尝试修复你当前正在做的事情更容易。
请注意,PostScript(与其他一些PDL不同)根本不允许您处理设备像素,并且您(如果我没记错的话)明确告知您无法可靠地执行此操作,无论是在PLRM还是一个支持书籍。