是否可以使用 ImageMagick 中的字体系列渲染字体?
我已经尝试了我能想到的一切,但似乎没有任何效果。我做了很多搜索,似乎找不到任何可以解决这个特定问题的东西。
我最终使用的是 PHP,但我也尝试在命令行上使用 ImageMagick,但没有成功。我在 Linux 上使用 ImageMagick 6.7.6。这是我到目前为止所做的。
identify -list font
我已经使用命令测试了 ImageMagick 识别的字体- 我根据系统上安装的 xml 文件手动创建了一个 type.xml 文件
- 我使用这个脚本创建了一个 type.xml 文件: imagick_type_gen
- 我测试过多种字体类型:ttf、otf、pfb、ttc
identify -list font
这是我测试过的一些字体的示例输出:
Font: DejaVu-Sans-Book
family: DejaVu Sans
style: Normal
stretch: Normal
weight: 400
glyphs: /usr/share/fonts/dejavu/DejaVuSans.ttf
Font: Baskerville-Regular
family: Baskerville
style: Normal
stretch: Normal
weight: 400
glyphs: /usr/share/fonts/custom/Baskerville.ttc
Font: Palatino-Roman
family: Palatino
style: Normal
stretch: Normal
weight: 400
glyphs: /usr/share/fonts/urw-fonts/p052003l.pfb
Font: Honey-Script-Light
family: Honey Script
style: Normal
stretch: Normal
weight: 300
glyphs: /usr/share/fonts/custom/HoneyScript-Light.ttf
如果我指定完整的字体名称,一切都会按预期工作:
convert -pointsize 32 -font "Honey-Script-Light" label:'Testing' testing.png
但是,当我尝试使用字体系列(由 type.xml 列出identify -list font
和在 type.xml 中列出)时,我得到了默认的系统字体:
convert -pointsize 32 -family "Honey Script" label:'Testing' testing.png
我也尝试指定所有字体的参数,但它再次不起作用:
convert -pointsize 32 -stretch Normal -style Normal -weight 300 -family "Honey Script" label:'Testing' testing.png
当我通过 PHP 执行类似的过程时,实际上只要我尝试设置绘图对象的字体系列,它就会返回错误。
$draw->setFontFamily('Honey Script');
这是引发的错误:
PHP Fatal error: Uncaught exception 'ImagickDrawException' with message 'Unable to set font family; parameter not found in the list of configured fonts
就像命令行选项一样,如果我指定完整的字体名称,图像就会正确呈现。
$draw->setFont('Honey-Script-Light');
从我发现的有关如何配置要与 ImageMagick 一起使用的字体的所有内容中,确实配置了字体。为什么我不能根据字体系列选择字体?
这可能是一个未记录的错误吗?有什么我想念的吗?
我意识到我可以简单地指定完整的字体名称并完成它,但有一个特定于我的项目的原因使得指定字体系列更好。
如果它不起作用,为什么要指定字体系列?这就是 ImageMagick 关于字体系列选项的说法:
此设置建议 ImageMagick 应尝试使用字体系列来呈现文本。如果可以找到家庭,则使用它;如果不是,则替换默认字体(例如,“Arial”)或已知相似的系列(例如,如果请求“System”但未找到,则可能使用“Courier”)。
任何想法都非常受欢迎。我几乎被困在这一点上。
编辑:
我更喜欢使用字体系列而不是完全命名的字体的主要原因是因为我正在处理的输入。我从第三方收到需要处理的文件。这些文件将字体指定为:
font-family="Honey Script" font-style="Normal" font-stretch="Normal" font-weight="300"
如果我必须根据该信息指定确切的字体名称,我需要为字体系列和属性的每个可能组合创建一个映射到确切的字体名称。由于数百种字体被添加到系统中,这将很难维护。
在我看来,必须有一种方法可以让 ImageMagick 根据上面列出的有关字体的所有可用详细信息来检索确切的字体。
如果那不可能,那么为什么 ImageMagick 可以选择指定字体系列呢?