2016-02-22 4 views
2

Как удалить все символы из файла шрифта TTF, которые не используются в данном текстовом примере с помощью Fontforge? Другими словами, я хочу создать подмножество из существующего шрифта, который содержит только символы, которые действительно отображаются в моем тексте. (Если вы знаете бесплатный инструмент, отличный от fontforge, который может это сделать, это тоже работает для меня).Удалить все неиспользуемые символы из TTF-шрифта с помощью Fontforge

Вот небольшой пример: есть текстовый файл, который содержит слова «사슴 코끼리 당나귀». Итак, как я могу удалить все остальные символы из файла шрифта, которые не являются частью этого небольшого текстового образца? В конце концов, я хочу получить новый TTF-файл, содержащий только используемые символы. Фактический текст длиннее этого, поэтому поиск вручную в fontforge не является вариантом.

В fontforge есть определенные опции выбора (Главное меню> Правка> Выбор), и я попытался «Выбрать по Wildcarcds» после преобразования корейских символов в их последовательности в Юникоде. Но еще не повезло.

Большое спасибо за любые идеи! С уважением

EDIT: прецедент: Я создаю детские книги, которые по своей природе состоят в основном из изображений. Текст, однако, не является частью изображений, но отображается на дополнительном уровне, который отображается на переднем плане изображений. Файлы ebook (я делаю в основном для amazon kindle) состоят из некоторых метаданных, файлов изображений, информации о макете и, конечно же, файлов шрифтов. Программа публикации Amazon Kindle имеет очень строгие ограничения по размеру файла. Для того, чтобы книга была продана за определенный диапазон цен, который я собираюсь, размер файла не должен превышать 3 мегабайта. Это нормально, когда я использую западный набор шрифтов. Но мои книги двуязычны, и для корейского издания мне нужно добавить корейский шрифт (в дополнение к западному шрифту). Азиатские файлы шрифтов сравнительно велики из-за характера их алфавитов/глифов. хранение 20.000 (в крайнем случае до 200 000) глифов составляет ~ 7-12 мегабайт на вес шрифта. Опять же, мой общий лимит файлов для книг составляет 3 мегабайта, что нужно делать для всех изображений и файлов шрифтов (плюс макет и метафайлы). Зная, что текст книги не изменяется читателем, можно сбрасывать все глифы с шрифта, который не используется в моем тексте. Еще одно соображение не заполняет память считывающего устройства пользователя. Я уже сильно сжимал файлы изображений и не могу идти дальше с сжатием, поскольку качество начинает страдать при определенных степенях сжатия. Надеюсь, теперь понятно, почему я считаю, что подмножество шрифта является хорошим решением.

+1

Вопрос: почему? [Какую проблему вы пытаетесь решить, что, по вашему мнению, требует подмножества?] (Http://meta.stackexchange.com/a/66378) –

+0

спасибо за указание. Я просто добавил вопрос к делу. – user3725694

+0

описанный вами прецедент уже покрыт, сообщая Acrobat и т. Д., Чтобы сгенерировать ваш документ с субтитрами шрифтов вместо полных вложений. Это не то, что вам нужно сделать самому. –

ответ

6

Я нашел способ создать подмножество существующего шрифта в fontforge на полуавтоматической основе. Ключ должен был использовать возможности сценариев fontforge. Я использовал интернет-сервис (см. Ссылку ниже), чтобы получить Юникод всех персонажей, которые я использую в своей книге. Это выглядит как это "\ uc6d0 \ uc22d \ uc774 \ uac1c \ ubbf8 \ uacf0 \ ubc8c \ ub3cc \ uace0 \ ub798"

Я взял вывод службы и использовать Notepad ++ s "поиск и замена" функциональность, чтобы получить следующая структура для скрипта:

SelectMore("uc6d0") 
SelectMore("uc22d") 
SelectMore("uc774") 
SelectMore("uac1c") 
SelectMore("ubbf8") 
SelectMore("uacf0") 
SelectMore("ubc8c") 
SelectMore("ub3cc") 
SelectMore("uace0") 
SelectMore("ub798") 

Да, он просто неоднократно называет ту же функцию: SelectMore(). Эта функция выбирает глиф, который передается в качестве аргумента без удаления предыдущего выбора. Также обратите внимание, что этот скрипт предполагает, что функция fontforge запущена и файл шрифта открыт. (Ссылка на скрипт скрипта fontforge, см. Ниже). Чтобы выполнить скрипт прямо из Fontforge, выберите «файл -> выполнить скрипт ...» в главном меню, вставьте скрипт и нажмите «Бег».

Теперь все используемые глифы выбраны, все неиспользованные глифы не выбраны. В главном меню нажмите «edit -> Selection -> inverse selection», чтобы все неиспользуемые глифы были выбраны.теперь мы можем запустить в главном меню «кодирование -> отделить глифы удаления», чтобы удалить все выбранные, неиспользуемые глифы. Теперь сохранение шрифта в качестве нового шрифта приводит к обязательному подмножеству.

конвертер Unicode: https://www.branah.com/unicode-converter Fontfore скриптовый помощь: https://fontforge.github.io/scripting-alpha.html

+1

Спасибо, что поделились своим решением! – gernberg

+0

Большое спасибо за ваше предложение. Работали чудесно! – Artanis

1

Большой вопрос/ответ user3725694. Для того, чтобы поколение сценария более автоматизированным следующие питона код может быть использован для получения Юникода данных для английских печатных символов:

import string 
s = string.printable 
for c in s: print('SelectMore("u%04x")' % ord(c)) 

Она возвращает:

SelectMore («u0030»)

SelectMore ("u0031")

...

Там в большой article на автоматических альтернативы ручной деятельности FontForge

Смежные вопросы