Imagick конвертировать SVG в PNG со шрифтами Google - PullRequest
0 голосов
/ 24 декабря 2018

Ну, я столкнулся с проблемой при использовании imagick, я пропускал шрифты, которые использовались в SVG.Поискал в интернете, но не смог найти ответ, который можно использовать.

svg содержит что-то вроде этого:

<defs>
    <style type="text/css">@import url("https://fonts.googleapis.com/css?family=Faustina");</style>
    <style type="text/css">@import url("https://fonts.googleapis.com/css?family=Ubuntu");</style>
</defs>
<text x="61.81135214943191" y="111.73005750523703" font-size="55" fill="#9E3E3E" transform="rotate(15)" font-family="Faustina" style="font-family:'Faustina' !important">Test 1</text>
<text x="61.81135214943191" y="171.73005750523703" font-size="45" fill="#9E3E3E" transform="rotate(-15)" font-family="Ubuntu" style="font-family:'Ubuntu' !important">Test 2</text>

пользователь может добавить больше шрифтов и больше текста в качестве фонового изображения / изображений дляsvg, но проблема в том, как добавить шрифты в imagick при преобразовании svg в png?

я могу загрузить эти шрифты и заменить код для использования font-face вместо импорта, но метод IMagick :: setFont принимает только строку,

Подойдет любой другой метод преобразования php, так как shell_exec и подобные команды отключены.Если на нашем тестовом сервере я могу изменить это значение, но на производственном сервере, на котором будет выполняться этот код, я ничего не смогу изменить.

сейчас я использую простой код:

$image = new IMagick();
$image->setBackgroundColor(new ImagickPixel('transparent'));
$image->readImageBlob($svg_html);
$image->setImageFormat("png32");

1 Ответ

0 голосов
/ 28 декабря 2018

Нашел решение моей проблемы, нужно было включить шрифт как base64 в defs.

, чтобы он выглядел как

<style>
@font-face {
  font-family: 'ABeeZee';
  font-style: normal;
  font-weight: 400;
  src: local('ABeeZee Regular'), local('ABeeZee-Regular'), url(data:font/woff2;base64,...)
}
</style>
...