【问题标题】:Convert .otf font into a .gif image of all glyphs将 .otf 字体转换为所有字形的 .gif 图像
【发布时间】:2017-06-04 17:26:41
【问题描述】:

如何将 .otf 字体文件转换为 .gif 图像,其中字体中的每个字形在 gif 中占据一个帧?

我见过 imagemagick 用于将字形转换为 png,

convert -background none -fill black -font font.otf -pointsize 300 label:"Z" z.png

这是否可以扩展为我所追求的?

或者我需要使用其他方法吗?

(另外请注意,上面的命令对我来说不能正常工作,我使用的字体 tangwar-annatar 有一些字形被上面命令生成的 png 的边缘切断)

我在 Mac 上可以访问几乎所有内容,因此只要适合我,我会接受任何语言的任何解决方案。

【问题讨论】:

  • 按"GIF 中的每一帧"您是动画 GIF 还是所有字形的蒙太奇?
  • @MarkSetchell 好吧,一个动画 gif,但我不关心动画本身。我想将所有字形作为单独的服装上传到一个名为 Scratch 的程序中,最快的方法是使用每帧一个“服装”的 gif
  • @theonlygusti 这甚至意味着什么?字形不是字母,它们只是映射到 unicode 代码点(序列)的轮廓,甚至不一定直接(连字是一回事)。如果你想要一个“代码页”表,那么有上百万种方法可以使用任何为其编写了字体解析器的编程语言,所以:选择一种语言,查看它是否有字体解析器,如果有,开始编程。然后,当您遇到困难时,Stackoverflow 可能会提供帮助,but not before you start。
  • @MarkSetchell 你的答案,虽然它绝对值得一票,但并没有真正转换字体中的 每个 符号,只是 [a-zA-Z0-9!;] 中的符号。我真的很喜欢字体中的 every 符号
  • 好的,感谢您回来。我不知道如何枚举字体中的所有字形,但如果你找到一种方法,请回复我,我们将尝试找出如何让 ImageMagick 将它们全部显示出来——通过输入 UTF 代码或类似的方法。

标签: bash image fonts converter


【解决方案1】:

再次更新

好的,我看到了您的字体,而且字符似乎超出了预期的大小。我认为您需要做的就是使用更大的画布:

#!/bin/bash
{
   for c in {a..z} {A..Z} {0..9}; do
      convert xc:none[1000x1000] -background none -fill black -font tengwar.otf -pointsize 300 \
         -gravity center -annotate 0 "$c" miff:-
   done

   # Do any problematic characters as an afterthought, e.g. semi-colon, and exclamation
   convert xc:none[1000x1000] -background none -fill black -font tengwar.otf -pointsize 300 \
         -gravity center -annotate 0 ";" miff:-
   convert xc:none[1000x1000] -background none -fill black -font tengwar.otf -pointsize 300 \
         -gravity center -annotate 0 "!" miff:-

} | convert -dispose background -delay 20 miff:- anim.gif

更新答案

您可能会在如下固定背景上使用-annotate 获得更好的效果。我还在这个例子中添加了如何处理有问题的字符 - 你也可以在另一个例子中做同样的事情:

#!/bin/bash
{
   for c in {a..z} {A..Z} {0..9}; do
      convert xc:none[350x350] -background none -fill black -font arial -pointsize 300 \
         -gravity center -annotate 0 "$c" miff:-
   done

   # Do any problematic characters as an afterthought, e.g. semi-colon, and exclamation
   convert xc:none[350x350] -background none -fill black -font arial -pointsize 300 \
         -gravity center -annotate 0 ";" miff:-
   convert xc:none[350x350] -background none -fill black -font arial -pointsize 300 \
         -gravity center -annotate 0 "!" miff:-

} | convert -dispose background -delay 20 miff:- anim.gif

原答案

你可以这样做:

#!/bin/bash
for c in {a..z} {A..Z} {0..9}; do 
   convert -background none -fill black -font arial -pointsize 300 \
   label:"$c" -gravity center -extent 350x350 miff:-
done | convert -dispose background -delay 80 miff:- anim.gif

【讨论】:

  • 没什么区别,只要把脚本的第一行设置成适当的shebang即可。我已经编辑了答案。并使用chmod +x myScript 使脚本可执行并使用./myScript 运行它。
  • 对于许多字形来说,边界框太小了,看看这生成了什么here。看看有多少在侧面和顶部被切断。我有时也会收到一个错误:convert: width or height exceeds limit 'E' @ error/cache.c/OpenPixelCache/3800. for some characters。
  • 好的,更改 -pointsize 修复了垂直截断,但我仍然得到水平裁剪,有时还有 width or height ... 错误
  • 您更新的答案仍然存在与以前相同的问题,即裁剪字母:cubeupload
  • 你能分享一下这个 "mad" 字体吗,我会为你做一些实验。
猜你喜欢
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 2013-06-13
  • 1970-01-01
  • 2011-02-01
  • 2013-05-20
  • 1970-01-01
相关资源
最近更新 更多