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

时间:2015-09-06 21:52:37

标签: 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" 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>

然后我用PHP代码将它传送到PHP上的PNG:

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

我得到这些正方形而不是我输入的文字:

enter image description here

有关如何控制这些字体的任何想法?

我找到了一个可以很好地控制字体的链接,但我无法做到 准确理解他们是如何做到的: http://www.rubblewebs.co.uk/imagemagick/server/fonts.php

1 个答案:

答案 0 :(得分:0)

首先,检查您正在运行的ImageMagick版本,如果它已经老了则升级 - 这些天世界在网上快速移动!

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

其次,考虑使用rsvg委托 - 您可以列出这样的委托:

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

最后,如果你在我的系统上运行命令,你就会得到这个 - 我添加了一个黑色边框,以便你可以看到范围。

enter image description here