【问题标题】:SVG to PNG with imagickSVG到PNG与imagick
【发布时间】:2012-07-09 23:26:45
【问题描述】:

我有一个嵌入了一些图像的 svg。比如:

<?xml version='1.0' encoding='UTF-8'?>

<svg 
  width="483" height="710" 
  xmlns="http://www.w3.org/2000/svg" 
  xmlns:xlink="http://www.w3.org/1999/xlink">
  <g>
    <title>Layer 1</title>
    <image 
      id="svg_1"
      y="0" x="0"
      height="199" width="176"
      xlink:href="http://192.168.3.2/images/1341920552_test.png"/>
  </g>
</svg>

因此,当我以常规 linux 用户身份通过​​命令行进行转换时,它会将其转换为 PNG 就好了。但是,如果我对用户 www-data 执行相同操作,那么它确实会转换,但图像不会显示在生成的 PNG 中,其他内容(如线条等)会显示。

如果我使用 PHP imagick 库进行转换,也会存在同样的问题。附件图片不显示。任何形式的帮助表示赞赏。

【问题讨论】:

  • 转换输出使用的文件夹的权限好像有问题。这里有一个解决方案:stackoverflow.com/a/11267305/795876
  • 不,输出实际上正在被写入。问题是输出只有像 eclipse、lines 等的绘图。SVG 中的 jpeg、png 等嵌入图像不会显示在转换后的输出中。

标签: php svg imagick


【解决方案1】:

经过大量实验,发现所有用户通过 ssh 登录都会出现此问题。登录到 GUI 会话的普通桌面用户可以毫无问题地进行转换。

我通过删除引用嵌入图像的 http URL 并添加本地文件系统路径解决了这个问题。这会降低我当前设计的应用程序的速度。不过反正这个暂时解决了。

我想知道为什么会这样。

【讨论】:

  • 我在另一个帖子上看到了某人对此的评论。长话短说,用户访问您的站点的权限与您在 shell 上的权限不同,出于安全目的,应该是这种情况。其中/usr/bin/中的convert命令没有完全权限,即777。所以访问你站点的用户进来,以站点用户的身份打开一个shell,不能使用convert命令。有几种解决方案... 将 convert 命令 chmod 为 777 或者您可以打开一个新的 shell,更改用户,运行 convert,然后关闭它。不过可能不推荐。
猜你喜欢
  • 2017-05-17
  • 2022-01-24
  • 1970-01-01
  • 2016-05-13
  • 2019-07-17
  • 1970-01-01
  • 2019-05-23
  • 1970-01-01
  • 2022-10-05
相关资源
最近更新 更多