我有问题用PHP和Imagick将SVG代码导出到JPG,因为它包含标签'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,但现在任何文本都可见。
提前致谢!