Php ImageMagick使用错误的字体将SVG转换为PNG

Php ImageMagick使用错误的字体将SVG转换为PNG,php,image,svg,imagemagick,imagemagick-convert,Php,Image,Svg,Imagemagick,Imagemagick Convert,我得到的是正方形,而不是SVG中输入的文本: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="200px"

我得到的是正方形,而不是SVG中输入的文本:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="200px" height="200px" version="1.1"
viewBox="0 0 200 200" xmlns:xlink="http://www.w3.org/1999/xlink">

<text font-size="40px" x="0" y="50" font-family="Arial" >
            123456789 ABCDEFGH
</text>

</svg>

123456789 ABCDEFGH
然后我用以下代码将其转换为PHP上的PNG:

<?php 
header('Content-Type: image/png'); 
$output = shell_exec("convert -size 280x280 test.svg png:- "); 
echo  $output; 
?>

我得到的是这些方块,而不是我输入的文本:

关于如何控制这些字体有什么想法吗

我发现了一个链接,显示了对字体的良好控制,但我不能 准确了解他们是如何做到的:

首先,检查您正在运行的ImageMagick的哪个版本,如果是旧版本,请升级它-当今世界随着网络的发展而快速发展

identify -version
Version: ImageMagick 6.9.1-10 Q16 x86_64 2015-09-04 http://www.imagemagick.org

第二,考虑使用<代码> RSvg< /Cord>委托-您可以列出这样的代表:

identify -list delegate | grep svg
    cdr =>          "uniconvertor" "%i" "%o.svg"; mv "%o.svg" "%o"
    cgm =>          "uniconvertor" "%i" "%o.svg"; mv "%o.svg" "%o"
    dot =>          "dot" -Tsvg "%i" -o "%o"
    dxf =>          "uniconvertor" "%i" "%o.svg"; mv "%o.svg" "%o"
    fig =>          "uniconvertor" "%i" "%o.svg"; mv "%o.svg" "%o"
    svg =>          "rsvg-convert" -o "%o" "%i"
identify -list font

  Font: Arial
    family: Arial
    style: Undefined
    stretch: Undefined
    weight: 0
    glyphs: /Library/Fonts/Microsoft/Arial.ttf
  Font: ArialB
    family: Arial
    style: Undefined
    stretch: Undefined
    weight: 0
    glyphs: /Library/Fonts/Microsoft/Arial Bold.ttf
第三,检查已安装的字体,如下所示:

identify -list delegate | grep svg
    cdr =>          "uniconvertor" "%i" "%o.svg"; mv "%o.svg" "%o"
    cgm =>          "uniconvertor" "%i" "%o.svg"; mv "%o.svg" "%o"
    dot =>          "dot" -Tsvg "%i" -o "%o"
    dxf =>          "uniconvertor" "%i" "%o.svg"; mv "%o.svg" "%o"
    fig =>          "uniconvertor" "%i" "%o.svg"; mv "%o.svg" "%o"
    svg =>          "rsvg-convert" -o "%o" "%i"
identify -list font

  Font: Arial
    family: Arial
    style: Undefined
    stretch: Undefined
    weight: 0
    glyphs: /Library/Fonts/Microsoft/Arial.ttf
  Font: ArialB
    family: Arial
    style: Undefined
    stretch: Undefined
    weight: 0
    glyphs: /Library/Fonts/Microsoft/Arial Bold.ttf
最后,如果你在我的系统上运行你的命令,你会得到这样的结果——我添加了一个黑色边框,这样你就可以看到范围了


首先,检查您正在运行的ImageMagick的哪个版本,如果是旧版本,请升级它-当今世界随着网络的发展而快速发展

identify -version
Version: ImageMagick 6.9.1-10 Q16 x86_64 2015-09-04 http://www.imagemagick.org

第二,考虑使用<代码> RSvg< /Cord>委托-您可以列出这样的代表:

identify -list delegate | grep svg
    cdr =>          "uniconvertor" "%i" "%o.svg"; mv "%o.svg" "%o"
    cgm =>          "uniconvertor" "%i" "%o.svg"; mv "%o.svg" "%o"
    dot =>          "dot" -Tsvg "%i" -o "%o"
    dxf =>          "uniconvertor" "%i" "%o.svg"; mv "%o.svg" "%o"
    fig =>          "uniconvertor" "%i" "%o.svg"; mv "%o.svg" "%o"
    svg =>          "rsvg-convert" -o "%o" "%i"
identify -list font

  Font: Arial
    family: Arial
    style: Undefined
    stretch: Undefined
    weight: 0
    glyphs: /Library/Fonts/Microsoft/Arial.ttf
  Font: ArialB
    family: Arial
    style: Undefined
    stretch: Undefined
    weight: 0
    glyphs: /Library/Fonts/Microsoft/Arial Bold.ttf
第三,检查已安装的字体,如下所示:

identify -list delegate | grep svg
    cdr =>          "uniconvertor" "%i" "%o.svg"; mv "%o.svg" "%o"
    cgm =>          "uniconvertor" "%i" "%o.svg"; mv "%o.svg" "%o"
    dot =>          "dot" -Tsvg "%i" -o "%o"
    dxf =>          "uniconvertor" "%i" "%o.svg"; mv "%o.svg" "%o"
    fig =>          "uniconvertor" "%i" "%o.svg"; mv "%o.svg" "%o"
    svg =>          "rsvg-convert" -o "%o" "%i"
identify -list font

  Font: Arial
    family: Arial
    style: Undefined
    stretch: Undefined
    weight: 0
    glyphs: /Library/Fonts/Microsoft/Arial.ttf
  Font: ArialB
    family: Arial
    style: Undefined
    stretch: Undefined
    weight: 0
    glyphs: /Library/Fonts/Microsoft/Arial Bold.ttf
最后,如果你在我的系统上运行你的命令,你会得到这样的结果——我添加了一个黑色边框,这样你就可以看到范围了


我了解到Imagemagick无法完全将svg转换为其他格式。但是github上有一个工具是。谢谢@CharlotteDunois,但我需要它在PHP中运行。我想在客户端浏览器中隐藏SVG。我会使用CANVAS来实现这一点……好吧,您已经在使用
shell\u exec()
来执行命令行了,为什么不对svgexport执行同样的操作呢?好吧,
-size
不是有效的ImageMagick参数。您的方块可能是一条错误消息。@MarkSetchell删除了它,但我得到了相同的方块。ThanksI read Imagemagick无法完全将svg转换为其他内容。但是github上有一个工具是。谢谢@CharlotteDunois,但我需要它在PHP中运行。我想在客户端浏览器中隐藏SVG。我会使用CANVAS来实现这一点……好吧,您已经在使用
shell\u exec()
来执行命令行了,为什么不对svgexport执行同样的操作呢?好吧,
-size
不是有效的ImageMagick参数。您的方块可能是一条错误消息。@MarkSetchell删除了它,但我得到了相同的方块。谢谢