Как обрезать изображение SVG с помощью Imagick в PHP? - PullRequest
0 голосов
/ 26 марта 2012

У меня есть изображения SVG, с большим количеством пустого пространства справа и снизу.Как обрезать изображение (с фиксированным размером, все изображения будут одинакового размера) с использованием PHP и imagick, и сохранить его обратно в те же файлы?

Ответы [ 2 ]

3 голосов
/ 26 марта 2012

Тебе вообще не нужен имагик. Поскольку SVG является XML-форматом, вы можете загрузить документ в объект DOMDocument и изменить атрибуты width и height в теге 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";
0 голосов
/ 28 марта 2012

Звучит так, будто вы хотите добавить (плотно подогнанный) viewBox к вашим SVG-файлам, а затем растеризовать их с помощью imagemagick.

Некоторые варианты выполнения первого шага:

...