【问题标题】:how to crop svg image with imagick in php?如何在 php 中使用 imagick 裁剪 svg 图像?
【发布时间】:2012-03-26 15:20:55
【问题描述】:

我有 SVG 图像,右侧和底部有很多空白。如何使用 PHP 和 imagick 裁剪图像(给定固定大小,所有图像将具有相同大小),并将它们保存回相同的文件?

【问题讨论】:

标签: php svg imagick


【解决方案1】:

您根本不需要 imagick。由于 SVG 是一种 XML 格式,您可以将文档加载到 DOMDocument 对象中并更改 svg 标签的宽度和高度属性。

这是一个例子(svg 文件是从jenkov.com借来的):

<?php
$svg = <<< EOF
<svg xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink">

    <rect x="50" y="50" height="110" width="110"
          style="stroke:#ff0000; fill: #ccccff"
          transform="translate(30) rotate(45 50 50)"
            >
    </rect>
    <text x="70" y="100"
          transform="translate(30) rotate(45 50 50)"
    >Hello World</text>
</svg>
EOF;

$myWidth = 100;
$myHeight = 150;

$dom = new DOMDocument();
$dom->loadXML($svg);
$svg = $dom->getElementsByTagName('svg');
$svg->item(0)->setAttribute('width', $myWidth);
$svg->item(0)->setAttribute('height', $myHeight);

print $dom->saveXML($svg->item(0))."\n";

【讨论】:

  • 我原以为更改图像尺寸而不是图形元素尺寸只会进行裁剪。我应该有兴趣了解自己!
  • SVG 文件的默认宽度和高度为 100%,画布的 0,0 点位于左上角。除非文件中的对象是使用相对大小创建的,否则设置较小的画布大小应该从文件中裁剪底部和右侧的空白。
  • @halfer,我看到我在回答中漏掉了一个词,调整大小当然应该只应用于 标签,从而只调整图像尺寸。
【解决方案2】:

听起来你想在你的 svg 文件中添加一个(非常合适的)viewBox,然后用 imagemagick 对它们进行光栅化。

执行第一步的一些选项:

【讨论】:

    猜你喜欢
    • 2016-09-14
    • 2018-03-28
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多