【问题标题】:Imagick doesn't render svg opacity properlyImagick 无法正确渲染 svg 不透明度
【发布时间】:2011-04-07 13:24:41
【问题描述】:

我需要 Inkscape 和 Imagick 的相同输出。

这是从 Inkscape 导出的预期结果。

但是,下面的 PHP 代码输出以下错误结果。

PHP 代码:

<?php
$im = new Imagick();

$im->setResolution(400,400);
$im->setBackgroundColor(new ImagickPixel('transparent'));
$im->readImageBlob(str_replace(array("color1", "color2"), array("yellow", "blue"), file_get_contents("img.svg")));

$im->setImageFormat("png");
header("Content-type: image/png");
echo $im;
?>

SVG 代码:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="400" height="400">
<rect width="100%" height="100%" fill="green" />
<path d="M250 150 L150 350 L350 350 Z" opacity="0.9" fill="color1" />
<path d="M150 50 L50 250 L250 250 Z" opacity="0.9" fill="color2" />
</svg>

【问题讨论】:

  • 为什么需要使用 Imagick?使用真正的 SVG 程序更容易做到。
  • 我在 Windows 7 64bit 2.3.0 上尝试过同样的问题。在 3.1 的 linux 上,它可以正常工作。

标签: php svg opacity imagick


【解决方案1】:

您正在运行什么版本的 PHP 和 ImageMagick?请分享phpinfo()的相关输出。 this ImageMagick bug 会影响你吗?或者,如果您不是最新的,会不会是另一个 ImageMagic 错误影响了您?

编辑:我目前无法轻松访问安装了 PHP 的 ImageMagick 库的服务器,但如果我找到了,我将测试提供的代码并发布我的结果。

EDIT2:看起来像others have the same issue,除非该论坛帖子也是您的...

根据this forum post,你可以试试:

$im->setImageFormat("png32");

一个人报告说有效,但另一个人说它没有......

【讨论】:

  • PHP 版本 => 5.3.2-1ubuntu4.2 imagick 模块版本 => 2.1.1-rc1
  • @Jan:谢谢。我又发布了一些建议。这是通过 Ubuntu 的apt-get 安装的库存 PHP/imagick 吗?什么版本的乌布图?我可以设置一个虚拟机,然后在我这边为你试一试。如果你想讨论这个问题,我经常在the PHP chat room
  • 我使用的是 ubuntu 10.04 lucid lynx,imagick 和 php 是由 synaptic(apt 前端)安装的。我还使用 PHP 5.3.3 版和 imagick 模块 2.3.0 版在主机上对其进行了测试
  • @Jan:抱歉,这是疯狂的一天,我无法为你测试这个。这个周末我试试。也许其他人会提出更明确的解决方案。
【解决方案2】:

Inkscape 使用不普遍支持的opacity 属性。请改用fill-opacitystroke-opacity

【讨论】:

  • 值得知道,但我试过用填充不透明度替换不透明度,这对这个例子没有影响。
【解决方案3】:

这已在当前版本的 Imagick 中得到修复。

【讨论】:

    猜你喜欢
    • 2014-12-24
    • 2012-06-16
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多