如何在 Imagemagick svg 到 png 转换中保留精确的颜色?

如何在 Imagemagick svg 到 png 转换中保留精确的颜色?

我们来看一个简单的 SVG 示例:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" version="1.1">
  <defs>
    <filter id="shadow" x="-200%" y="-200%" width="500%" height="500%">
      <feFlood flood-color="#000000" flood-opacity="0.5" result="floodColor"/>
      <feGaussianBlur in="SourceAlpha" stdDeviation="3.0" result="blur"/>
      <feOffset in="blur" dx="0.0" dy="0.0" result="offsetBlur"/>
      <feComposite in="floodColor" in2="offsetBlur" operator="in" result="shadow"/>
      <feBlend in="SourceGraphic" in2="shadow" mode="normal"/>
    </filter>
  </defs>
  <rect
    x="10"
    y="10"
    width="80"
    height="80"
    rx="10"
    stroke-width="5"
    stroke="#131414"
    fill="#212124"
    filter="url(#shadow)"
  />
</svg>

请注意,矩形的填充颜色是#212124,如源中所定义:

在此处输入图片描述

如果我通过 Imagemagick 将此 SVG 转换为 PNG,convert test.svg test.png我将获得:

在此处输入图片描述

请注意,填充颜色已更改为#1C1C21。我已使用多个图像查看器/编辑器检查了颜色,以排除差异来自显示的可能性。

为什么 Imagemagick 会改变颜色,我该怎么做才能保持完全相同的颜色值?


我偶然发现了色彩管理Imagemagick 的 (我对 RGB 与 sRGB 主题感到困惑),并尝试添加-set colorspace RGB。结果如下:

在此处输入图片描述

所以#222126现在更接近了#212124,但仍然没有精确的颜色匹配。

如果有关系的话,相关的软件版本是:

  • ImageMagick 6.9.7-4
  • Inkscape 0.92.3

答案1

给定以下 SVG 文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" version="1.1">
  <defs>
    <filter id="shadow" x="-200%" y="-200%" width="500%" height="500%">
      <feFlood flood-color="#000000" flood-opacity="0.5" result="floodColor"/>
      <feGaussianBlur in="SourceAlpha" stdDeviation="3.0" result="blur"/>
      <feOffset in="blur" dx="0.0" dy="0.0" result="offsetBlur"/>
      <feComposite in="floodColor" in2="offsetBlur" operator="in" result="shadow"/>
      <feBlend in="SourceGraphic" in2="shadow" mode="normal"/>
    </filter>
  </defs>
  <rect
    x="10"
    y="10"
    width="80"
    height="80"
    rx="10"
    stroke-width="5"
    stroke="#131414"
    fill="#212124"
    filter="url(#shadow)"
  />
</svg>

以及以下命令:

convert test.svg test.png

我得到了以下图像:

GIMP 屏幕截图

如您所见,测量的颜色正好是#212124。此外,图像正好是 100x100 像素:

$ file test.png 
test.png: PNG image data, 100 x 100, 16-bit/color RGB, non-interlaced

我正在使用 ImageMagick 版本 6.9.11。

相关内容