Как установить высоту и ширину при создании PNG из SVG с помощью PHP Imagick? - PullRequest
1 голос
/ 06 января 2020

Я пытаюсь динамически генерировать файлы PNG из SVG.

Итак, допустим, у меня есть файл SVG http://domain.tld/lib/img/svg/12345.svg, но я хотел бы вызвать http://domain.tld/png/12345/5000/, что приводит к PNG-изображению шириной 5000 пикселей мой файл SVG.

У меня есть две проблемы:

  1. Изменение размера не работает, как я уже говорил, потому что PNG сначала получает размеры SVG, а затем масштабируется, что приводит к результатам. в каком-то безобразном PNG, как вы можете себе представить. Но мне интересно, как сказать сценарию: «Создать PNG из SVG в размерах x / y» ??
  2. Сейчас мне нужно создать временный файл 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);
...