Я пытаюсь динамически генерировать файлы PNG из SVG.
Итак, допустим, у меня есть файл SVG http://domain.tld/lib/img/svg/12345.svg
, но я хотел бы вызвать http://domain.tld/png/12345/5000/
, что приводит к PNG-изображению шириной 5000 пикселей мой файл SVG.
У меня есть две проблемы:
- Изменение размера не работает, как я уже говорил, потому что PNG сначала получает размеры SVG, а затем масштабируется, что приводит к результатам. в каком-то безобразном PNG, как вы можете себе представить. Но мне интересно, как сказать сценарию: «Создать PNG из SVG в размерах x / y» ??
- Сейчас мне нужно создать временный файл PNG, который распечатывается вместо полностью динамически создаваемого файла. , (В противном случае мне всегда говорят, что изображение содержит ошибки. Но если я сохраняю его и загружаю снова, оно работает. Но это отстой ...)
Вот мой код:
$file = 'lib/img/svg/12345.svg';
$size = 5000;
$temp = 'lib/img/png/temp/12345.png';
$img = new Imagick();
$img->setBackgroundColor(new ImagickPixel('transparent'));
$svg = file_get_contents($file);
$img->readImageBlob($svg);
$img->setImageFormat('png24');
$img->resizeImage($size, 0, imagick::FILTER_LANCZOS, 1);
$img->writeImage($temp);
$img->clear();
$img = imagecreatefrompng($temp);
header('Content-Type: image/png');
imagealphablending($img,false);
imagesavealpha($img,true);
imagepng($img);
imagedestroy($img);