繁体   English   中英

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

[英]How to read an SVG with a given size using PHP 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">

有没有人有过使用setSize获取SVG文件的经验?

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)(好吧,我认为这是正确的公式)。 但是,任何至少达到或超过该值的值也可以正常工作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM