ImageMagick SVG в JPG с текстовым путем - PullRequest
0 голосов
/ 07 сентября 2018

У меня проблемы с экспортом SVG-кода в JPG с помощью PHP и Imagick, поскольку он содержит тег «textpath». Полный SVG:

<svg id="svg_export" viewBox="0 0 800 533 " style=" pointer-events: none;">
<svg xmlns="http://www.w3.org/2000/svg" width="800" height="533" version="1.1">
    <svg id="svg-tree">
        <svg id="tree_title">

            <path id="path_title" d="M 282 478 q 120 20 240 0" stroke="blue" stroke-width="1" fill="none"></path>

            <text class="tspan_title_tree" style="font-size: 20px; font-family: Times;">
                <textPath id="text_title_svg" startOffset="50%" href="#path_title">Título</textPath>
            </text>
        </svg>
        <svg id="cell_1" x="381" y="432" height="31" width="41">
            <text id="text_cell_1" font-size="7" x="50%" alignment-baseline="middle" y="10.640625">
                <tspan class="tspan_cell_tree" x="50%" dy="1.2em" font-family="Times" style="font-family: Times;">
                    Plain Text
                </tspan>
            </text>
        </svg>
    </svg>
</svg>

Код, который я использую для экспорта изображения:

    $im_cells = new \Imagick();
    $im_cells->setBackgroundColor(new \ImagickPixel('transparent'));
    $svg = $this->svgScale($this->svg, $width, $height);

    $im_cells->readImageBlob($svg);
    $im_cells->scaleImage($width, 0);
    $im_cells->setImageFormat("png32");

    $tree = new \Imagick($this->getBackgroundFile());
    $tree->scaleImage($width, 0);

    $result = new \Imagick();
    $result->newImage($width, $height, new \ImagickPixel('red'), 'png');

    $result->addImage($tree);
    $result->addImage($im_cells);
    $result = $result->mergeImageLayers(\Imagick::LAYERMETHOD_FLATTEN);

    $result->writeImage(base_path('orders/image.jpg"));

После экспорта отображается только изогнутая линия без текста. Я читал, что imagick не поддерживает этот тег, так есть ли способ сделать это?

Мне нужно сделать это с помощью этого инструмента, потому что в процессе я накладываю разные слои, но, если есть другие способы, скажите мне, это будет полезно.

Я также пытался установить Inkscape, но теперь любой текст виден.

Заранее спасибо!

1 Ответ

0 голосов
/ 08 сентября 2018

Я установил Inkscape 0.92.3_4 на свой Mac OSX Sierra с ImageMagick 6.9.10.11 Q16. Я выполнил следующую команду:

convert -density 300 test.svg test.jpg

Полученное изображение показывает улыбку и размытый текст.

enter image description here

...