我心中有这个问题,任何帮助都会受到赞赏。 是否有PHP函数或库可以从字体文件中提取一些字形?
编辑: 通过提取一些字形,我想根据提取的字形创建一个新的字体文件(因此它有较小的字节),或者只是获取字形并从中创建base64编码的字体数据,这样我就可以通过@ font-嵌入它了面对。我只想摆脱没有用的字形,这样可以更快地加载CSS(base64)或字体文件。
答案 0 :(得分:0)
我可以通过两种方式理解你的问题。要么直接从图像文件中提取图像,要么想要将该字体作为图像中的文本进行打印。
但两者都有相同的答案:
尝试GD或ImageMagick使用字体从字体文件中提取字形图像,将该字符打印到图像中。不要像图像那样打开字体,按照预期使用字体。然后,您可以按照您想要的任何大小打印字形,然后根据需要使用它。
答案 1 :(得分:0)
你试图制作一个子集字体不是吗?嵌入式字体社区已经对此问题进行了大量调查。
即便如此,这里也没有明确的答案。上次我检查人们编写Perl / C程序,根据TTF / OTF规范从字体文件中提取二进制数据。
如果你使用拉丁字体,请不要兄弟因为它足够小。如果您使用像我这样的CJK字体,FontForge可以帮助您手动复制和粘贴格里夫。除此之外,您需要自己编写脚本/程序。
答案 2 :(得分:0)
我使用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' ]
但是未经制造者许可使用某些字体是非法的*