我有以下代码:
$image = new Imagick();
$image->setBackgroundColor(new ImagickPixel('green'));
$image->setSize(20,20);
$image->readImageBlob(file_get_contents('./some/path/image.svg'));
Run Code Online (Sandbox Code Playgroud)
它加载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">
Run Code Online (Sandbox Code Playgroud)
有没有人有过获取SVG文件的经验setSize?
setSize()函数仅适用于原始图像格式,而不适用于SVG.你需要使用scaleImage()代替......
$image = new Imagick();
$image->setBackgroundColor(new ImagickPixel('green'));
$image->readImage('./some/path/image.svg');
$image->scaleImage(20,20);
Run Code Online (Sandbox Code Playgroud)
顺便说一下,如果你将SVG图像缩小到更小的尺寸(就像你在这种情况下那样),那将会正常工作,对于任何升级它的人来说,你需要做另外一件事.如果你只是改变上面的大小,它将出现锯齿状和像素化.在这种情况下,您需要使用setResolution()来增加分辨率,如下所示:
$image = new Imagick();
$image->setResolution(2000,2000);
$image->setBackgroundColor(new ImagickPixel('green'));
$image->readImage('./some/path/image.svg');
$image->scaleImage(1000,1000);
Run Code Online (Sandbox Code Playgroud)
setResolution()的实际值应该计算为72*(final_size/original_size)(好吧,我认为这是正确的公式).但是,任何至少达到或超过该值的值也可以正常工作.