我有以下代码:
$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
合作的经验?
答案 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,我可以使用上述说明安全地调整大小。