Imagick не может писать файлы SVG

Я использую Imagick, чтобы открыть изображение, изменить его размер, установить формат изображения (если это необходимо) и записать результат в другую папку. Работает с ICO и PNG, но не могу написать SVG файлы, говоря, что

ImagickException: невозможно записать файл: C: \ Sites \ devdesktop \ test \ sites \ default \ files \ tempimages \ abstract-spiral-striped-background-100.svg в Imagick-> writeimage () (строка 44 из C: \ сайты \ devdesktop \ тест \ сайтов \ все \ модули \ testmodule \ testmodule.module).

Это было сообщение об ошибке от Drupal 7.

Вот мой код:

$file = file_load($form_state['values']['fid']);
$image = new Imagick(drupal_realpath($file->uri));
$image->setImageFormat($type[$type_num]);
$image->resizeImage($size[$size_num], $size[$size_num], Imagick::FILTER_UNDEFINED, 1);
$destination = 'public://tempimages/'.substr($file->filename, 0, -4).'-'.$size[$size_num].'.'.$type[$type_num];
$image->writeImage(drupal_realpath($destination));    //<---problem
drupal_goto(base_path().'/sites/default/files/tempimages/'.substr($file->filename, 0, -4).'-'.$size[$size_num].'.'.$type[$type_num]);

Этот фрагмент кода прекрасно работает с ICO и PNG, но не пишите файл в формате SVG, за исключением небольшого кода

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN""http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="200" height="200">
<g style="</svg>

Почему так?

0

Решение

SVG не изображение так же, как JPG или же PNG являются.

Это просто xml с нанесенными точками в большинстве случаев, и обычно не имеет размеров и разрешения.

width а также height из 200 просто размер в px в котором это было сохранено. Поэтому вам никогда не нужно «изменять размер» SVG, поскольку он будет масштабироваться бесконечно.

Если вы положите SVG в img пометьте и определите размеры, например:

<img src="myawesome.svg" width="500" height="500" />

Хотя это определено в SVG как имеющие размеры 200, он должен масштабироваться больше или меньше без изменения качества внешнего вида.

Из-за этого полного различия в структуре, он не будет следовать тем же правилам в некоторых случаях, что и jpg или же png будет, как они представляют изображения.

Если это делается в Drupal; сделать исключение для SVG он просто сохраняет файл без изменения размера и добавляет размеры, где бы он ни был напечатан для всех изображений. Это не повредит визуализированным изображениям, и должно показать SVG так же, как их размер.

TL; DR SVG является xml Файл, а не изображение, изменение его размера не имеет смысла, так как не имеет реального разрешения или размера и может масштабироваться бесконечно. Они только кажутся похожими, так как оба являются визуальными элементами. Сделать исключение для SVG так что он просто хранит файл, и когда либо визуализированные изображения или SVG добавить измененные размеры к img выход.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]