Pat*_*edl 5 php svg imagemagick imagick
好的,我正在运行 CentOS 服务器、PHP 5.4.440 和 ImageMagick 6.5.4,我正在尝试添加其他字体,例如 Lobster。这是我到目前为止所做的:
上传 Lobster.ttf 到 /home/myusername/fonts/
从 SSH 运行“perl imagick_type_gen > fonts.xml”。这导致了一个大字体文件,但不包含对 Lobster.otf 或 Lobster.ttf 的引用
相反,我生成了自己的 type.xml 并将其保存到 /home/myusername/.magick/。这是标记:
<?xml version="1.0"?>
<typemap>
<type format="otf" name="Lobster" fullname="Lobster" family="Lobster" glyphs="/home/myusername/fonts/Lobster.otf" />
</typemap>
Run Code Online (Sandbox Code Playgroud)
通过 SSH,我编辑了 /user/lib64/ImageMagick-6.5.4/config/type.xml 并插入了引用自定义 type.xml 的节点:
<typemap>
<include file="type-ghostscript.xml" />
<include file="/home/myusername/.magick/type.xml" />
</typemap>
Run Code Online (Sandbox Code Playgroud)
重新启动了服务器。
在这一点上,我可以使用这个列出字体:
$image = new Imagick();
$fonts = $image->queryfonts();
foreach($fonts as $font) {
echo $font . '<br />';
}
Run Code Online (Sandbox Code Playgroud)
龙虾出现在列表中。但是,将 SVG 转换为 PNG 不使用 Lobster 字体。我在这里看到了与我类似的其他问题,它们似乎有效。我需要做什么才能让系统识别添加的字体?
这是我用来渲染应该是使用 Lobster 作为字体的图像的代码:
//Setup SVG to be read by Imagick.
$SVG = '<?xml version="1.0" encoding="utf-8"?>';
$SVG .= '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">';
$SVG .= '<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="158px" height="92px" viewBox="0 0 158 92" enable-background="new 0 0 158 92" xml:space="preserve">';
$SVG .= '<text transform="matrix(1 0 0 1 32 58)" font-family="Lobster" font-style="normal" font-size="20px" font-weight="400">Lobster</text>';
$SVG .= '</svg>';
$image = new Imagick();
//Convert SVG to JPG
$image->readImageBlob($SVG);
$image->setImageFormat("jpeg");
//Save the thumbnail.
$save_path = 'lobster-test.jpg';
$image->writeImage($save_path);
echo '<img src="'.$save_path.'">';
Run Code Online (Sandbox Code Playgroud)
我在这里完全不知所措。帮助!
这里讨论了一个完整的解决方案:http : //www.multipole.org/discourse-server/viewtopic.php?t=25630
但这是简短的版本:
之后,ImageMagick 将使用 SVG 中的字体。一个警告是您必须使用嵌入在字体中的 font-family 声明。例如,Lobster.otf 实际上列出了“Lobster 1.4”。
如果您已经安装了字体并使用了正确的字体系列名称,您将得到您的字体!