Попробуйте извлечь шрифт с помощью Python или ImageMagick

У меня есть проект, который преобразует текст на китайском языке в растровое изображение для удаленного ЖК-дисплея. Поскольку он работает на сервере, предпочтительны инструменты командной строки.

Я пытаюсь использовать Python/PIL и ImageMagick для реализации такой системы. ImageMagick используется для создания растрового изображения из текста до того, как Python/PIL преобразует его в специальный формат пакета для удаленных дисплеев.

После прочтения примеров IM6 с веб-сайта IM:

Я обнаружил, что сглаживание создает проблемы в этом процессе. Например, он отлично работает со следующей командой:

C:\ImageMagick-6.6.6-6\convert -background lightblue -fill blue -pointsize 48 -font "SimSun-&-NSimSun" label:@chinese_words.utf8 label_utf8_simsun.gif

Сгенерированное изображение Новичку не разрешено публиковать изображение.

Выглядит отлично, потому что имеет сглаживание с высоким разрешением. ЖК-дисплей имеет только черно-белое изображение, без псевдонимов, и он должен иметь низкое разрешение, например 12x12 пикселей. Я попробовал следующий сценарий.

C:\ImageMagick-6.5.6-Q16\convert -pointsize 16 -font "SimSun-&-NSimSun" +antialias -strokewidth 0.4 -threshold 50%% label:@chinese_words.utf8 label_utf8_simsun_16_bw_strokewid1.gif

Результат выглядит ужасно, а растровый пиксель отсутствует.

Создать изображение Новичку не разрешено публиковать изображение.

Кто-нибудь знает, как извлечь шрифт truetype с помощью Python/ImageMagick, подходящий для LCD (без сглаживания, двухцветный, маленький размер/низкое разрешение)?

Заранее спасибо за помощь!


person Kai Liu    schedule 16.04.2012    source источник


Ответы (1)


SimSun кажется хорошим намеком, поэтому он четкий и читабельный при маленьком размере пикселей. Скриншот ниже увеличен из символа (я не знаю, что это такое, так что если это что-то... грубо, это не было моим намерением :) ), я вставил в WordPad с размером шрифта 10 пт в Windows 7.

Снимок экрана SimSun

Итак: вы можете захотеть изучить альтернативы, которые отображают глифы с использованием библиотеки, которая правильно поддерживает подсказку шрифта. FreeType делает это (при компиляции с поддержкой хинтинга — алгоритм все еще запатентован, если я правильно помню), и если вашей серверной платформой также будет Windows, будет довольно легко написать приложение C#/GDIPlus. который отображает текст для вас.

EDIT: Из любопытства и скуки я реализовал дешевые привязки Python ctypes к Freetype2 и добавил столь же дешевый код рендеринга, следуя руководству по Freetype2. Кажется, он делает достойную работу даже при небольших размерах - и подсказки и т. Д. Настраиваются, я просто использую значения по умолчанию в своем коде.

введите здесь описание изображения

Код доступен по адресу https://bitbucket.org/akx/python-minift/src -- Я не даю никаких гарантий, что он работает должным образом, но это достойная отправная точка.

person AKX    schedule 16.04.2012
comment
Спасибо. Подсказка шрифта многое объясняет. Я не уверен насчет ОС производственного сервера, поэтому предпочтительнее портативное решение. Например, Python/PHP/GCC или аналогичный. Кстати, я не силен в программировании для Windows. В качестве альтернативы я нашел родной китайский растровый шрифт в DOS. Это легко сделать с помощью Python/C под Windows/Linux. Тем не менее, Unicode должен быть первым выбором, поскольку мой проект не зависит от языка, другие языки должны поддерживаться, включая PanEuro/Korean/Japanese/Arabic/Farsi и т. д. Я буду продолжать гуглить его. - person Kai Liu; 16.04.2012
comment
@KaiLiu - смотрите мой исправленный ответ! :) - person AKX; 16.04.2012
comment
Прохладный. Большое спасибо, это может быть хорошей кодовой базой. Позвольте мне попробовать. - person Kai Liu; 17.04.2012
comment
Доступ к вашему URL запрещен. Возможно, у меня нет привилегий для этого источника. - person Kai Liu; 17.04.2012
comment
@KaiLiu - извините, я сделал репозиторий закрытым. Теперь это общедоступно! - person AKX; 17.04.2012
comment
Спасибо за вашу поддержку. Я скачал исходник. Я пробую это сейчас. - person Kai Liu; 28.04.2012