SVG 1.2 通过ImageMagick进行栅格化:矢量效果问题

huangapple go评论56阅读模式
英文:

SVG 1.2 rasterizing via ImageMagick: vector-effect issue

问题

我注意到在不同版本的Ubuntu 22.04上,桌面版和Docker容器中,相同版本的ImageMagick CLI实用程序convert表现出不同的行为。

我想要渲染SVG并利用SVG 1.2属性vector-effect="non-scaling-stroke":

<svg xmlns="http://www.w3.org/2000/svg"
    width="200"
    height="200"
>
    <g
        x="0"
        y="0"
        transform="scale(4)"
    >
        <rect
            x="25"
            y="25"
            width="50"
            height="50"
            fill="#0cc"
            stroke="black"
            stroke-width="2"
            vector-effect="non-scaling-stroke"
        ></rect>
    </g>
</svg>

我在Xubuntu桌面22.04和Ubuntu 22.04服务器上的bash中运行了以下命令:

convert test.svg test.png

在Xubuntu 22.04桌面上,我得到了预期的结果:

桌面输出 - 存在细的、非缩放的描边和透明背景。

但是在Docker容器中的Ubuntu 22.04服务器上,缺少vector-effect的应用:

服务器输出 - 存在粗的、缩放的描边和强制填充的背景。

两个系统都使用相同版本的ImageMagick:

convert --version
Version: ImageMagick 6.9.11-60 Q16 x86_64 2021-01-25

我需要强制服务器版本的ImageMagick考虑vector-effect="non-scaling-stroke"。

英文:

I've noticed different behavior of ImageMagick CLI utility convert of the same version, but on different versions of Ubuntu 22.04: desktop and docker container.

I want to render SVG utilizing SVG 1.2 attribute vector-effect="non-scaling-stroke":

<svg xmlns="http://www.w3.org/2000/svg"
    width="200"
    height="200"
>
    <g
        x="0"
        y="0"
        transform="scale(4)"
    >
        <rect
            x="25"
            y="25"
            width="50"
            height="50"
            fill="#0cc"
            stroke="black"
            stroke-width="2"
            vector-effect="non-scaling-stroke"
        ></rect>
    </g>
</svg>

I run next command within bash both on Xubuntu Desktop 22.04 and Ubuntu 22.04 server:

convert test.svg test.png

and I get expected result on Xubuntu 22.04 Desktop:

Desktop output - there are thin, non-scaled stroke and also transparent background.

But I get lack of vector-effect applying on Ubuntu 22.04 server within Docker container:

Server output - there are thick scaled stroke and force filled background.

Both system have the same ImageMagick version:

convert --version
Version: ImageMagick 6.9.11-60 Q16 x86_64 2021-01-25

I need to force server version of ImageMagick to take vector-effect="non-scaling-stroke" into account.

答案1

得分: 1

问题很可能出在你的两个Imagemagick系统上使用的SVG渲染器不同。可能是Imagemagick的内部MSVG/XML渲染器,RSVG代理或者如果系统上安装了Inkscape(并且IM能够找到它的话),则可能是Inkscape,渲染质量逐渐增加。通过在命令行中添加-verbose来检查可能正在使用哪个渲染器。

英文:

The issue is likely which SVG renderer you are using on your two Imagemagick systems. It could be Imagemagick's internal MSVG/XML renderer, RSVG delegate or Inkscape if Inkscape is installed on the system (where IM can find it) all in order of increasing quality of the render. Check which is being used possibly by add -verbose to your command line.

huangapple
  • 本文由 发表于 2023年5月25日 06:43:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/76327839.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定