当我从SVG读取时,为什么我的ImageMagick / Imagick设置总是崩溃?

时间:2012-01-27 19:15:01

标签: php svg imagemagick imagick

我正在运行ImageMagick 6.7.4-0和Imagick 3.0.1。

我拥有SVG所需的所有代表(convert -list configure | grep DELEGATES的输出显示bzlib djvu fontconfig freetype gvc jpeg jng jp2 lcms lqr openexr png rsvg tiff x11 xml wmf zlib)。

以下是一些示例PHP代码,用于将非常简单的SVG转换为PNG:

$file = 'baseball.svg';
$im = new Imagick();
$im->readImage($file);
$im->setImageFormat("png32");
header("Content-Type: image/png");
print $im->getImageBlob();

我从服务器得到503响应; PHP没有报告,也没有记录。我启用了所有php错误,启用了显示错误,启用了日志错误等。我可以从.png转换为.jpg,所有这些都很好。

还有一个重要的注意事项 - 我能够在这台服务器上使用SVG几个月,但我不得不将ImageMagick从6.6.x升级到6.7.x以获得与文本失真相关的一些错误。我首先尝试了最新版本(6.7.4-10)但无法任何转换工作,所以我降级到6.7.4-0并且所有转换除了SVG 再次工作。我只是不能排除这个!

编辑:在Ubuntu 10.04上运行。服务器是Litespeed 4.0.10。

编辑2:我刚刚发现此代码 - 从命令行(php test.php)运行时 - 实际上确实创建了.png完全来自.svg,即使它报告“分段错误”。从浏览器运行此脚本不会生成任何文件。

$file = 'baseball.svg';
$im = new Imagick();
$im->setBackgroundColor(new ImagickPixel('transparent'));
$im->readImage($file);
$im->setImageFormat("png32");

$fp = fopen(time() . '.png', 'w');
fwrite($fp, $im->getimageblob());
fclose($fp);

2 个答案:

答案 0 :(得分:1)

您可能没有安装实际的RSVG 二进制软件包。

答案 1 :(得分:0)

我尝试了ImageMagick 6.7.x以及Imagick版本的每个组合,没有运气(总是段错误,但命令行PHP至少能够创建文件)

我尝试了ImageMagick 6.6.x以及Imagick版本的每个组合,仍然没有运气(总是段错误,命令行PHP无法创建任何东西)。

我尝试为ImageMagick添加所有必需和建议的依赖项,然而,暂时没有运气。

我删除了Imagick,卸载了ImageMagick,然后运行了apt-get install libmagickcore3-extra imagemagick --fix-missing。然后运行pecl install imagick-3.0.1

Voila,所有工作都按预期工作但回到我尝试升级ImageMagick 之前的状态。我似乎无法在Ubuntu上使用自动编译的ImageMagick / Imagick完全使用SVG。