Уменьшение шрифта .OTF путем удаления глифов - программирование
Подтвердить что ты не робот

Уменьшение шрифта .OTF путем удаления глифов

Я не могу поверить, что этот вопрос не задавался специально для шрифтов OpenType, но знает ли кто-нибудь о способе удаления глифов из этих шрифтов?

У меня есть .OTF с очень большим размером файла (почти 10 МБ), и мне нужно сделать его меньше. Причины в два раза.

1) Я пытаюсь подготовить его для веб-внедрения, поэтому чем меньше файлов, тем проще для клиента.

2) Font Squirrel (используется для легкой подготовки файлов шрифтов) имеет ограничение на загрузку 2 МБ - я знаю, что есть альтернативы, но пока ничего не удалось. Чтобы сохранить трату времени людей, те, которые я пробовал, оказались неудачными: http://fontface.codeandmore.com/ и http://www.font2web.com/. CodeAndMore.com, похоже, работает, но шрифты, которые он выплевывает, полностью отличаются от того, который я дал ему.

Имейте в виду, что я не эксперт по шрифтам, поэтому легко ответом.

4b9b3361

Ответ 1

Создал учетную запись для ответа на этот вопрос. Я знаю, что это старый вопрос. Но лучше иметь более поздний ответ, чем без ответа.

Я столкнулся с подобной проблемой. По-видимому, решения Googlable нет. Поэтому я написал Python2 script с библиотекой fontforge делает следующее:

  • принимает исходный шрифт
  • Принимает файл, содержащий все используемые символы. Это может быть файл перевода, файл файла строки, HTML файл и т.д.
  • Вывести шрифт с символами, которые не отображаются в удаленном файле.

Вот код:

#!/usr/bin/python2
import sys
import fontforge

if len(sys.argv) == 4:
    font = fontforge.open(sys.argv[1])

    f = open(sys.argv[2], "r")

    for i in f.read().decode("UTF-8"):
        font.selection[ord(i)] = True
    f.close()

    font.selection.invert()

    for i in font.selection.byGlyphs:
        font.removeGlyph(i)

    font.generate(sys.argv[3])
else:
    print "WARNING: Check the license of the source font\nbefore distributing the output font generated by this script.\nI'm not responsible for any legal issue caused by\ninappropriate use of this script!\n"
    print "Usage: {} [source font] [file with glyphs NOT to be removed] [output]".format(sys.argv[0])
    print "Example: {} /path/to/ukai.ttc chineseTranslation.txt ukaiStripped.ttf".format(sys.argv[0])

Обратите внимание, что использование этого script для определенных шрифтов может быть законным. Обеспечьте проверку лицензии исходного шрифта. Я не несу ответственности за какие-либо юридические проблемы, вызванные использованием любого шрифта, созданного этим script.

Ответ 2

У FontTools есть программа, называемая pyftsubset, которая делает это

https://github.com/behdad/fonttools

Используйте что-то вроде этого:

pyftsubset MyFont.otf --output-file=MyFontStripped.otf --unicodes-file=file-of-codes.txt

Где file-of-codes.txt содержит список таких кодов, как:

U+09c78
U+09ce5
U+09ce7
U+09ce9
U+09ceb
U+09cec
U+09cf0
U+09cf3
U+09cf4
U+09cf6
...

Ответ 3

После последнего комментария: Вы можете выбрать несколько наборов за раз в левом меню (Языки), используя сдвиг и командную клавишу всего за один снимок. Обратите внимание, что изображение сохраняет базовую латиницу (A-Z a-z). После выбора выбранных наборов щелкните в окне глифов и выберите "Все" (cmd-A). Это займет некоторое время, если в этом случае есть много. Затем cmd-Delete и вы удалите все. Вам нужно только повторить операцию с помощью "Категории", и все готово. Затем экспортируйте .otf

Categories selectionLanguages selection

Ответ 4

10 Мб шрифта Opentype очень редок, потому что он очень тяжелый, поэтому я предполагаю, что это собственный шрифт, а не коммерческий. Для удаления глифов вы можете отредактировать шрифт в FontForge (бесплатно) или в любом другом коммерческом редакторе шрифтов и после этого восстановить .otf(также. ttf)

Для создания webfonts (я думаю, вам понадобятся .ttf,.svg,.eot и .woff), вы можете использовать локально несколько бесплатных инструментов: sfnt2woff, ttf2eot, Batik SVG и с ttfautohint вы можете улучшить способ отображения шрифта на экране перед преобразованием.

Ответ 5

fonttools теперь принят Google: https://github.com/googlei18n/fonttools. Я использовал его, чтобы уменьшить количество глифов в шрифтах Google Noto для использования во встроенной системе. Работает угощение!

Ответ 6

Я столкнулся с этим сегодня, потому что я пытался сохранить шрифт после CTRL + A и установки ширины (не делайте этого, кстати). Я выбрал немного более простой подход к написанию скриптов на Python, так как у меня уже был открыт шрифт в FontForge.

Это предполагает, что у вас открыт нужный шрифт и он активен. Также предполагается, что вы хотите сохранить только первые 128 символов (диапазон ASCII). Он выбирает все, а затем использует флаг "меньше", чтобы отменить выбор диапазона от 0 до 127. Посмотрите руководство по написанию скриптов для FontForge Python, чтобы узнать больше о различных способах выбора.

Файл> Выполнить скрипт

font = fontforge.activeFont()
font.selection.all()
font.selection.select(("ranges","less"),0,127)
font.clear()