如何使用PHP Imagick读取给定大小的SVG?

时间:2012-02-10 10:24:10

标签: php svg imagick

我有以下代码:

$image = new Imagick();
$image->setBackgroundColor(new ImagickPixel('green'));
$image->setSize(20,20);
$image->readImageBlob(file_get_contents('./some/path/image.svg'));

加载SVG就好了,setSize只是被完全忽略了。根据它的定义,它呈现550x100:

<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" 
    xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
    width="550px" height="100px" viewBox="0 0 550 100" 
    enable-background="new 0 0 550 100" xml:space="preserve">

是否有人有使SVG文件与setSize合作的经验?

2 个答案:

答案 0 :(得分:5)

setSize()函数仅适用于原始图像格式,不适用于SVG。你需要使用scaleImage()代替......

$image = new Imagick();
$image->setBackgroundColor(new ImagickPixel('green'));
$image->readImage('./some/path/image.svg');
$image->scaleImage(20,20);

顺便说一句,如果你将SVG图像缩小到较小的尺寸(就像你在这种情况下那样),那将会正常工作,对于任何升级它的人来说,你需要做另外一件事。如果你只是改变上面的大小,它将出现锯齿状和像素化。在这种情况下,您需要使用setResolution()来增加分辨率,如下所示:

$image = new Imagick();
$image->setResolution(2000,2000);
$image->setBackgroundColor(new ImagickPixel('green'));
$image->readImage('./some/path/image.svg');
$image->scaleImage(1000,1000);

setResolution()的实际值应该计算为72 *(final_size / original_size)(好吧,我认为这是正确的公式)。但任何至少达到该值或更高价值的价值也可以正常工作。

答案 1 :(得分:3)

关于扩展SVG:使用我当前的设置( ImageMagick 6.7.8-1 2012-10-03 Q16 SVG rw+)SVG即使使用setResolution()setImageResolution(),也无法放大以90x30像素保存的内容。如果我将SVG重新保存为更高的尺寸,例如9000x3000,我可以使用上述说明安全地调整大小。