【问题标题】:How to read an SVG with a given size using PHP Imagick?如何使用 PHP Imagick 读取给定大小的 SVG?
【发布时间】:2012-02-10 10:24:10
【问题描述】:

我有以下代码:

$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 配合使用的经验?

【问题讨论】:

  • 你想调整它的大小吗?我发现通过将 svg 加载为 xml 更容易
  • @k102 您的意思是在将 XML 传递给readImageBlob 之前更改它吗?这可能行得通..
  • hm... 在我的情况下,我只需要调整 svg 图像的大小并在浏览器中显示它。你需要 Imagick 做什么?

标签: php svg imagick


【解决方案1】:

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)(好吧,我认为无论如何这是正确的公式)。但任何至少等于或高于该值的值也可以正常工作。

【讨论】:

    【解决方案2】:

    关于放大 SVG:使用我当前的设置(ImageMagick 6.7.8-1 2012-10-03 Q16SVG rw+)一个 SVG 保存在即使使用setResolution()setImageResolution(),90x30 像素也无法放大。如果我改为以更大的尺寸(例如 9000x3000)重新保存 SVG,我可以按照上述说明安全地放大或缩小它。

    【讨论】:

      猜你喜欢
      • 2012-05-10
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 2023-03-16
      • 2014-09-14
      • 2018-07-27
      • 1970-01-01
      相关资源
      最近更新 更多