我有这个问题,任何帮助将不胜感激。是否有 PHP 函数或库可以从字体文件中提取一些字形?
编辑:通过提取一些字形,我想根据提取的字形创建一个新的字体文件(因此它的字节更小),或者只是获取字形并从中创建base64编码的字体数据,这样我就可以通过@嵌入它字体。我只是想摆脱无用的字形,以便更快地加载 CSS (base64) 或字体文件。
您正在尝试制作子集字体,不是吗?嵌入式字体社区已经对这个问题进行了大量调查。
即便如此,这里也没有明确的答案。上次我检查人们编写 Perl/C 程序以根据 TTF/OTF 规范从字体文件中提取二进制数据。
如果您使用的是拉丁字体,请不要因为它足够小而兄弟。如果您像我一样使用 CJK 字体,FontForge 可以帮助您手动复制和粘贴字形。除此之外,您需要自己编写脚本/程序。
我可以通过两种方式理解你的问题。您想直接从字体文件中提取图像,或者您想使用该字体作为图像中的文本进行打印。
但两者都有相同的答案:
尝试使用 GD 或 ImageMagick 从字体文件中提取字形的图像,使用字体将该字符打印到图像中。不要像图像一样打开字体,按预期使用字体。然后,您可以以您想要的任何大小打印字形,并随心所欲地使用它。
我用 python 做过一次:这是代码片段
def get_pdf_fontobjects(self, ):
pdffile = self.pdffile
pdf_font_objects = []
p = subprocess.Popen(["pdffonts", pdffile], shell=False, stdout=subprocess.PIPE)
for line in p.stdout:
line = line.strip()
g = re.search("^(\S+)\s.+?yes\s+(\d+)\s+(\d+)$", line)
'''if g and g.group(1) in self.fonts2process:
pdf_font_objects.append(g.group(2))'''
if g:
font_name = g.group(1)
for font_pattern in self.fonts2process:
if re.search(font_pattern, font_name):
pdf_font_objects.append(g.group(2))
return pdf_font_objects
并且 font2process 可以是字体名称列表: fonts2process = ['Arial-Unicode-MS', 'Shruti', 'ArialUnicodeMS', 'TT', 'Raavi', 'SolaimanLipi', 'AnjaliOldLipi', 'Vrinda', ' Surekh', 'AAAAAB+ArialUnicodeMS', 'AAAAAG+VArialUnicodeMS', 'DNCDIV+Tunga_00', 'JGTFDM+Tunga,Bold_00', 'Latha', 'Mangal','Surekh','Gautami']
但是未经制造商许可使用某些字体是非法的*