gpt4 book ai didi

ImageMagick 将 SVG 转换为 PNG 会占用最右侧和最底部的像素

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

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

例如,考虑 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 将 SVG 转换为 PNG 会占用最右侧和最底部的像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7748169/

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