使用ImageMagick指定具有字体系列的字体

cha*_*suf 8 php fonts imagemagick font-family

是否可以使用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
Run Code Online (Sandbox Code Playgroud)


如果我指定完整的字体名称,一切都按预期工作:

convert -pointsize 32 -font "Honey-Script-Light" label:'Testing' testing.png
Run Code Online (Sandbox Code Playgroud)

工作


但是,当我尝试使用字体系列(由identify -list fonttype.xml 列出并列出)时,我得到默认的系统字体:

convert -pointsize 32 -family "Honey Script" label:'Testing' testing.png
Run Code Online (Sandbox Code Playgroud)

不工作


我也尝试指定所有字体的参数,它再次不起作用:

convert -pointsize 32 -stretch Normal -style Normal -weight 300 -family "Honey Script"   label:'Testing' testing.png
Run Code Online (Sandbox Code Playgroud)



当我通过PHP执行类似的过程时,它会在我尝试设置绘图对象的字体系列时立即返回错误.

$draw->setFontFamily('Honey Script');
Run Code Online (Sandbox Code Playgroud)

这是抛出的错误:

PHP Fatal error:  Uncaught exception 'ImagickDrawException' with message 'Unable to set font family; parameter not found in the list of configured fonts
Run Code Online (Sandbox Code Playgroud)



就像命令行选项一样,如果我指定完整的字体名称,则图像会正确呈现.

$draw->setFont('Honey-Script-Light');
Run Code Online (Sandbox Code Playgroud)



从我发现的有关如何配置与ImageMagick一起使用的字体的所有内容中,确实配置了字体.为什么我不能根据字体系列选择字体?

这可能是一个没有文档的bug吗?有什么我想念的吗?

我意识到我可以简单地指定完整的字体名称并完成它,但是有一个特定于我的项目的原因使得指定字体系列更好.

如果不起作用,为什么指定字体系列是一个选项?这就是ImageMagick关于字体系列选项的说法:

此设置建议ImageMagick应尝试用于呈现文本的字体系列.如果可以找到它的家庭,则使用它; 如果不是,则替换默认字体(例如,"Arial")或已知类似的家族(例如,如果请求"系统"但未找到,则可以使用"Courier").

任何想法都非常受欢迎.我几乎陷入困境.


编辑:
我更喜欢使用字体系列而不是完全命名字体的主要原因是因为我正在处理的输入.我从第三方收到需要处理的文件.这些文件将字体指定为:

font-family="Honey Script" font-style="Normal" font-stretch="Normal" font-weight="300"
Run Code Online (Sandbox Code Playgroud)

如果我必须根据该信息指定确切的字体名称,我需要为每个可能的字体系列和属性组合创建一个映射到确切的字体名称.由于数百种字体被添​​加到系统中,因此很难维护.

在我看来,必须有一种方法让ImageMagick根据上面列出的有关字体的所有可用细节检索确切的字体.

如果那是不可能的,那么为什么ImageMagick可以选择指定字体系列呢?

Ja͢*_*͢ck 2

这是由于字体系列的工作方式所致;例如,“Arial”字体系列包含粗体、斜体、下划线等的特定字体定义。在选择图像中使用的字体时,您必须具体化。

我猜如果您真的愿意,您可以执行以下操作:

  1. 获取字体系列名称,用破折号替换空格
  2. 如果有效的话,那就太好了!
  3. 如果没有,则追加-Regular到末尾并重试

但是你不应该对字体系列进行任何编程,除非你被迫;-)

我的 imagick 知识来源主要来自这个人:http://valokuva.org/?cat =1