使用ImageMagick将SVG文件转换为PNG(我使用的是6.3.7)时,转换中的右侧和底部的像素线似乎都会丢失。
例如,考虑代表钻石的this simple SVG,完全适合SVG的60x60几何体。使用
转换为SVG时convert diamond.svg diamond.png
它生成this PNG(大小也是60x60像素)。在PNG中,最右边和底部的钻石角落已被削掉。此外,钻石似乎略微缩放了1个像素。
有人可以确认这种行为,可能会提供一些理由并可能提供修复吗?
答案 0 :(得分:0)
'有人可以确认这种行为,可能会提供一些理由并可能提供修复吗?'
SVG是 vector 格式,因此不知道像素(好吧,除非你将像素图像嵌入SVG ......)。
SVG路径的尺寸是以像素为单位定义的。这就是为什么它的大小为60x60。
当您渲染 SVG(在Inkscape或任何SVG查看器中显示)时,您可以无缝地缩放图像,并且您永远不会发现像素化(除非您使用放大镜查看显示器屏幕的像素。)
但是,PNG 不是一种矢量格式,它是一种位图格式,由像素组成。要绘制对角线黑色边缘,需要使用“阶梯式”黑色像素(可能通过在其间添加一些灰度像素来平滑以实现一点抗锯齿效果)。
当您要求ImageMagick将您的钻石转换为60x60像素大小的PNG时,它只有60x60网格来创建对角线。
现在做一个数学运算:你怎么能填充一个从1像素高度到30像素高度的“perfekt”像素楼梯(这是第31步,你算了吗?)并回到1像素高度(这将是第61步,你算了吗?))进入这样一个网格?!? - 你不能!
保持完美形状的唯一'修复'(没有'剃掉'效果,如你所观察到的那样)可能是缩放PNG以使用61x61的大小(或122x122):
convert diamond.svg -resize 61x61 +antialias diamond.png
rsvg-convert -w 61 -h 61 -o diamond-rsvg.png diamond.svg
将小矢量图形转换为小像素图形将始终'松散'某些东西,始终要求您接受一些妥协!