使用Imagick在OSX Mavericks(MAMP 3)上读取PHP SVG [英] PHP SVG read on OSX Mavericks (MAMP 3) using Imagick
问题描述
我有类似以下的问题: ImagickException与消息Postscript委托在MAMP 3.0上失败. 5
I have nearly the same problem like here: ImagickException with message Postscript delegate failed on MAMP 3.0.5
我想读取我用php创建的SVG文件(5组维恩图),我想将其写到png/jpeg或任何文件中……什么都行不通.它在第三行中断:
I would like to read an SVG file (5 set Venn Diagram), which I created with php and I would like to write it out to a png/jpeg or whatever file... nothing work. It breaks on the 3rd line:
$im = new Imagick();
$svg = $venn_diagram;
$im->readImageBlob($svg);
$im->setImageFormat("jpeg");
$im->adaptiveResizeImage(720, 445);
$im->writeImage($folder . 'output_venn_diagram.png');
$im->clear();
$im->destroy();
与此:
Fatal error: Uncaught exception 'ImagickException' with message 'no decode delegate for this image format `' @ error/blob.c/BlobToImage/359' in /myphp.php:500 Stack trace: #0 /myphp.php(500): Imagick->readimageblob('<svg version='1...') #1 {main} thrown in /myphp.php on line 500
这个非常简化的SVG也打破了它:
It breaks also with this very simplified SVG also:
<svg version='1.0' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='746' height='742' viewBox='-362 -388 746 742' encoding='UTF-8' standalone='no'>
<defs>
<ellipse id='ellipse' cx='36' cy='-56' rx='160' ry='320' />
<g id='ellipses'>
<use xlink:href='#ellipse' fill='#0000ff' />
<use xlink:href='#ellipse' fill='#0099ff' transform='rotate(72)' />
</g>
</defs>
</svg>
我真的不知道该怎么办:
I don't really know what to do:
- 正在运行MAMP/php.
- 我检查了文件开头是否有SVG规范.
- 我多次安装,卸载并重新安装了imagick.
- 我也重新启动了MAMP.
- MAMP / php running.
- I have SVG specification in the beginning of my file, I checked.
- I installed, uninstalled, reinstalled (with brew) imagick several times.
- I restarted MAMP also.
有人知道该怎么办吗?
感谢帮助!
- OS X Mavericks 10.9.3
- MAMP 3.05
- PHP 5.5.10
- imagemagick 6.8.9-1
推荐答案
您的SVG无效xml,因此无效SVG
Your SVG isn't valid xml and so isn't valid SVG
将其添加到SVG的开头:
Add this to the start of the SVG:
<?xml version="1.0"?>
它应该工作.适用于我的完整代码是:
And it should work. The complete code that works for me is:
$svg = <<< END
<?xml version="1.0"?>
<svg version='1.0' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='746' height='742' viewBox='-362 -388 746 742' encoding='UTF-8' standalone='no'>
<defs>
<ellipse id='ellipse' cx='36' cy='-56' rx='160' ry='320' />
<g id='ellipses'>
<use xlink:href='#ellipse' fill='#0000ff' />
<use xlink:href='#ellipse' fill='#0099ff' transform='rotate(72)' />
</g>
</defs>
</svg>
END;
$image = new \Imagick();
$image->readImageBlob($svg);
$image->setImageFormat("jpg");
header("Content-Type: image/jpg");
echo $image;
产生此图像:
这篇关于使用Imagick在OSX Mavericks(MAMP 3)上读取PHP SVG的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!