gpt4 book ai didi

imagemagick - ImageMagick将SVG转换为PNG会吃掉最右边和最下面的像素

转载 作者:行者123 更新时间:2023-12-04 13:11:03 24 4
gpt4 key购买 nike

使用ImageMagick将SVG文件转换为PNG(我使用的是6.3.7)后,转换中似乎丢失了右侧和底部的像素线。

例如,考虑this simple SVG代表钻石,完美契合SVG的60x60几何形状。当转换为SVG时

convert diamond.svg diamond.png


它会生成 this PNG(大小也为60x60像素)。在PNG中,最右端和最下端的钻石角已被削掉。同样,钻石似乎稍微按比例放大了1个像素。

有人可以确认这种行为,可能提供一些理由并提供解决方法吗?

最佳答案

“有人可以确认这种行为,可能提供一些理由并提供解决办法吗?”


SVG是矢量格式,因此不知道像素(好吧,除非您将像素图像嵌入SVG ...)。
SVG路径的尺寸以像素为单位定义。这就是为什么将其尺寸设置为60x60。
渲染SVG(在Inkscape或任何SVG查看器中显示)时,您几乎可以缩放图像,并且永远不会发现像素化(除非使用放大镜观察监视器屏幕的像素)。
但是,PNG不是矢量格式,而是一种由像素组成的位图格式。要绘制对角黑色边缘,它需要使用“阶梯状”黑色像素(可能通过在它们之间添加一些灰度像素进行平滑以实现一些抗锯齿效果)。
当您要求ImageMagick将钻石转换为60x60像素大小的PNG时,它只有60x60的网格可以创建对角线。
现在进行数学计算:如何填充从1像素高度到30像素高的“完美”像素阶梯(这是第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

将小矢量图形转换为小像素图形将始终“松散”某些东西,并且始终需要您做出一些妥协才能被接受!

关于imagemagick - ImageMagick将SVG转换为PNG会吃掉最右边和最下面的像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7748169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com