【问题标题】:How to use SVG CSS styles with IMagick?如何在 IMagick 中使用 SVG CSS 样式?
【发布时间】:2018-09-06 07:03:58
【问题描述】:

似乎 (PHP) Imagick 不接受 CSS 样式,即使 <style> 位于 SVG 的 <def> 内。那是对的吗?我找不到这方面的参考资料。

如果是这样,还有什么方法可以得到想要的结果?也许用它们的定义替换所有类?所以,例如,如果有

.some-class {
  stroke-dasharray: 5 5;
}

然后将class="some-class" 替换为stroke-dasharray="5 5",或者替换为style="stroke-dasharray: 5 5;",因为Imagick 似乎理解样式属性。

【问题讨论】:

  • 我不确定我是否理解您的问题,但 Imagemagick 可以使用 RSVG 委托或 Inkscape 来处理 SVG 文件以将其呈现为某种光栅格式或查看它。必须安装 RSVG,然后编译 Imagemagick 以使用 RSVG。如果 Inkscape 在您的系统上,Imagemagick 无需重新编译即可使用它。
  • @fmw42 很高兴知道。我不知道。但是,我无法影响我正在使用的服务器上的 Imagick。而且它不尊重任何 css 样式。
  • 您的 Imagemagick 版本是否包含 RSVG 作为委托?您可以查看convert -version 是否列出了 RSVG。如果它与 Imagemagick 一起安装,则 Imagick 应该使用它。但是,您尝试调用的 Imagick 命令是什么?再说一次,也许我误解了你的问题。
  • 你的系统上有 Inkscape 吗?如果没有,请尝试添加它,看看是否可以将 SVG 文件转换为光栅格式?
  • @fmw42 我正在使用 php 的 Imagick:secure.php.net/manual/en/class.imagick.php

标签: php css svg imagemagick imagick


【解决方案1】:

似乎是 librsvg 中的一个错误。如果我将type="text/css" 添加到<style> 标签,它就像一个魅力。

【讨论】:

    【解决方案2】:

    我将您的代码作为 test.svg 保存到文件中,并使用带有 RSVG (librsvg @2.42.2_0) 的 Imagemagick 6.9.9.30 Q16 Mac OSX,它工作正常。我得到一个红色的小方块:

    convert test.svg test.png
    

    你的 RSVG 版本是什么。

    convert -list format
    

    会告诉你的。

    也许您需要升级 RSVG 或您的 Imagemagick 版本。

    【讨论】:

    • 谢谢。这可能是真的。正如我所说,我无法运行 exec 命令(或任何其他命令)进行检查。我也无法访问服务器,所以如果这是问题所在,我将不得不使用旧的 RSVG 版本。
    • 询问您的托管服务提供商是否会升级 RSVG 以与 Imagemagick 一起使用。我在当前版本的 librsvg 中使用 IM 6.8.9.9 运行了相同的命令,它运行良好。
    • 好主意。我会试试的。
    【解决方案3】:

    我最近遇到了同样的问题,由于缺少软件包,我在我的本地主机上工作,但不在服务器上工作。 我从 Imagick 安装了 inkscape 和 SVG 生成(实际上我使用的是干预图像,驱动程序设置为 imagick)

    apt-get install inkscape
    

    编辑:起初 SVG 生成根本不起作用,我关注了这个线程 Imagick SVG to JPG error no decode delegate

    然而,在那之后,SVG 生成开始工作了,不幸的是,从 SVG 渲染的 PNG 是灰度的。我认为 SVG 中的样式丢失了,这个线程帮助了我: how to resize an SVG with Imagick/ImageMagick

    【讨论】:

      猜你喜欢
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 2012-12-24
      • 1970-01-01
      • 2021-05-27
      相关资源
      最近更新 更多