如何通过命令行将WOFF转换为TTF/OTF?

50

我知道像在线字体转换器这样的服务,但我对离线解决方案感兴趣,最好是通过命令行。有没有人知道如何将WOFF离线转换为OTF / TTF的工具或工作流程?


1
看到这个标题,WOFF(Web Open Font Format)的命名方式非常不一致。W3C应该直接采用“Web Truetype字体”。 - fmalina
8个回答

68

干得好啊。Shebang 在 OSX 上不起作用,通过将其输入解释器进行修复。 - Max
1
Windows提示每个输出的OTF文件都“不是有效的字体文件”。 - Ky -
无法工作 - @Supuhstar 我的经验也是如此(Win7ultimate,py3.4.3) - zanlok
你能解释一下它的工作原理吗,这样我就可以自己构建一个了吗? :) - oldboy
1
@barethon:由于源代码非常简短,您是否介意在您的答案中包含它,以便将来可以保留? - balu

8
以下是关于制作WOFF文件的参考代码:http://people.mozilla.org/~jkew/woff/ 我还有一个镜像:https://github.com/samboy/WOFF 要编译和安装,请确保您已经安装了zlib开发库(例如,在CentOS6中,以root身份运行“yum -y install zlib-devel”),然后
git clone https://github.com/samboy/WOFF
cd WOFF
make

然后,作为root用户:

cp sfnt2woff /usr/local/bin

完成上述步骤后,要制作Web字体,请进入.tff文件所在的目录,然后运行sfnt2woff命令。

sfnt2woff Chortle2014f.ttf

这将创建一个Chortle2014f.woff网络字体文件。请用实际的webfont名称替换“Chortle2014f.ttf”以进行转换。
我提供的第一个链接提供了Windows和MacOS二进制文件,适用于不想安装编译器的人。
以下是制作WOFF2文件的参考代码:https://github.com/google/woff2 请注意,此代码不会在CentOS6中安装,但在CentOS7中可以编译和安装。
git clone --recursive https://github.com/google/woff2.git
cd woff2
make clean all

woff2字体生成类似于:

woff2_compress Chortle2014f.ttf

WOFF代码有woff2sfnt,而WOFF2代码有woff2_decompress。从道德的角度来看,最好通过在Mozilla中突出显示文本,右键单击“检查元素”,转到“字体”,查看字体名称,然后使用搜索引擎查找并购买所需的字体名称。如果字体是开源的,那么这绝对是最好的方法,因为网页上的WOFF/WOFF2文件可能已经被子集化或以其他方式受损。 - samiam
1
作者正在询问如何将WOFF转换为TTF/OTF。本帖介绍了TTF→WOFF和WOFF2。 - mrflix

8
我不喜欢当前最佳答案是一个Python脚本,而且似乎有人说它不起作用。此外,当前的答案中没有提及使用zopfli压缩算法编译WOFF转换器,这种算法优于其他工具使用的标准zlib算法。出于这些原因,我决定走“正常”(即非脚本)路线,并在此过程中添加自己的答案。
注意:下面两个实用程序的编译过程非常简单,通过复制和运行我提供的代码片段甚至更容易,但它们仍然需要一个工作编译器。如果您之前没有从源代码编译软件,您可能需要首先设置编译器环境。如果您正在使用Cygwin,则可以按照这里我的答案的第一部分设置MinGW-w64交叉编译器。
WOFF CLI转换器(带有ZOPFLI压缩)

首先,将sfnt2woff1编译并安装。将以下所有内容粘贴到终端中并按下Enter

git clone https://github.com/bramstein/sfnt2woff-zopfli.git woff &&
cd woff &&
make &&
chmod 755 woff2sfnt-zopfli sfnt2woff-zopfli &&
mv woff2sfnt-zopfli sfnt2woff-zopfli /usr/local/bin &&
rm -rf ../woff

一旦工具被编译和安装,运行以下命令将TTF或OTF文件转换为WOFF:

sfnt2woff-zopfli <inputfile>.ttf

您也可以使用-n选项来增加程序运行的迭代次数,以牺牲转换时间为代价增加压缩率(默认迭代次数为15)。
将当前目录中的所有文件转换为WOFF:
for i in *; \
do sfnt2woff-zopfli.exe "$i"; \
done

WOFF2 CLI转换器(带Brotli压缩)

首先,通过将以下所有内容粘贴到终端并按下Enter来编译并安装Google的woff2工具

git clone --recursive https://github.com/google/woff2.git &&
cd woff2 &&
make clean all &&
mv woff2_compress woff2_decompress woff2_info /usr/local/bin &&
rm -rf ../woff2

一旦该工具已经编译并安装完成,运行以下命令将单个TTF或OTF文件转换为WOFF2:

woff2_compress.exe <inputfile>.ttf

要将当前目录中的所有文件转换为WOFF2格式:

for i in *; \
do woff2_compress.exe "$i"; \
done

你甚至可以将WOFF2文件转换回TTF或OTF格式:
woff2_decompress.exe <inputfile>.woff2

注意,此处的SFNT指的是TTF和OTF字体格式所基于的SFNT表格格式。

4
据我所见,这些工具将OTF/TTF转换为WOFF,而不是相反。我的问题特别寻找将WOFF转换回OTF/TTF的工具。请帮我寻找这样的工具。 - Jonas Lekevicius
1
在Ubuntu 18.04上,您应该使用woff2_compress而不是woff2_compress.exe。其他命令也是如此。 - AlienKevin
1
@JonasLekevicius,这就是woff2_decompress的作用,正如最后一个示例所演示的那样。Google的WOFF2 CLI包有两个可执行文件:woff2_compress用于将OTF/TTF转换为WOFF2,而woft2_decompress用于将WOFF2转换为OTF/TTF。 - Hashim Aziz

5
在使用Homebrew的Mac上,这比其他提到的方法更简单。

.woff2 转 .ttf

brew install woff2
woff2_decompress somefont.woff2

这将使你在同一个目录下得到 somefont.ttf
.woff 转 .ttf
转换 WOFF(不是 woff2)有点棘手,woff2_decompress 可能处理不了它。你首先要把 .woff 文件转换成 .woff2 文件,然后使用 woff2_decompress 命令把它转化为 .ttf 文件。
有一个 brew tap 可以用来安装 sfnt2woff,可以用来将你的 .woff 转换成 .woff2。
brew tap bramstein/webfonttools;
brew install sfnt2woff;
sfnt2woff somefont.woff;
woff2_decompress somefont.woff2

值得注意的是,在Linux上解决方案同样简单:woff2很可能可以在您的发行版存储库中找到。例如,在基于Debian的发行版上,您可以使用“sudo apt install woff2”进行安装。 - Tin Man
值得一提的是,这个解决方案正是谷歌和Bramstein在上面发布的那个解决方案 :-) - undefined

5

是的,我一直在使用这个。但是,我特别想找到一种离线工作的方法。 - Jonas Lekevicius

3

你能解释一下背后的哲学,这样我就可以自己构建一个吗? - oldboy
还有,是否有办法创建 ttf 文件而不是 otfpako_inflate.js 是必要的吗?那是 Node,不是 Vanilla,对吧? - oldboy
我无法解释那个。我刚刚将Python直译成了Javascript。 - Tom Adler
1
不理解发生了什么,怎么进行转换?转换是如何工作的,是简单地调整容器的元数据还是其他方式? - oldboy
1
是的,至少没有留下这样的理解痕迹。反正已经五年了。 - Tom Adler
好的,那么这应该不难吧?你知道为什么 WOFF2 不起作用吗?处理 WOFF2 是否与处理其他字体格式一样,需要删除或更改元数据? - oldboy

2

2
我知道这个帖子已经不活跃了一段时间,但是在一些stackoverflow用户的帮助下,我能够使用上述提到的Python脚本[woff2otf.py by @hanikesn]创建一个工作流,允许批量转换woff文件。 即使不是为了原始帖子的用途,对于那些在寻找相同东西的人,请查看我的帖子以获取有关如何执行此操作的详细信息: 修改Python脚本以批量转换目录中的所有“WOFF”文件 即使您不需要批量转换,在线字体转换器的结果不可靠,everythingfonts.com对转换的限制为0.4 MB,除非您升级到付费账户,否则两者都需要相比离线解决方案更耗费时间。 祝你好运!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接