PDA

Просмотр полной версии : Embedded font при программной генерации swf


Whim
18.06.2008, 14:59
Разбираю формат swf, чтобы генерировать файлы программно.
Создать текст, использующий device font проблемы нет. Но вот застряла на том, чтобы встроить шрифт в swf.
Понятно, что нужно использовать GlyphShapeTable в DefineFont.
Но как создать shape для каждого символа и куда его записывать?
Может кто-нибудь сталкивался и может направить в нужное русло?

Dendroid
18.06.2008, 15:18
По-моему, проще всего нагенерить разных swf c фонтами через swfmill (http://swfmill.org/doc/using-swfmill.html), и смотреть как оно внутри это устроило.

<?xml version="1.0" encoding="iso-8859-1" ?>
<movie version="9">
<background color="#555555"/>
<frame>
<library>
<font name="Symbols" import="font/dejavusans.ttf"
glyphs="&#x2605;&#x2606;&#x2613;&#x2620;&#x2713;&#x2714;&#x2715;&#x2716;&#x2717;&#x2718;&#x2764;"/>
</library>
</frame>
</movie>

Whim
18.06.2008, 15:53
Видно что был сделан импорт определенных символов из файла .TTF. А как его сделать от этого то все равно понятнее не становится:(

etc
18.06.2008, 18:02
Пишете парсер ttf в вектор, потом из вектора в бинарный вид тега и вуаля.

Whim
19.06.2008, 21:44
Получить контур символа из ttf и засунуть его в swf получилось:yahoo: Единственная загвоздка - размер шрифта.
В спецификации написано:
SWF glyphs are always defined on an EM square of 1024 by 1024 units. Glyphs from other
sources (such as TrueType fonts) may be defined on a different EM square. To use these
glyphs in SWF file format, they should be scaled to fit an EM square of 1024.
Во-первых, тогда не понимаю: почему когда делаешь fla, если используешь, например, символ 'А' Tahoma 12px и его же размером 16px, то нужно же вроде делать embedded и для размера 12 и для 16.
Во-вторых, никак не могу сделать, чтобы отрисованные мной символы совпадали с нужным размером. Если генерирую контур символа из шрифта размером 1024px, то отрисовывается с очень хорошим по точности качеством, но когда задаю потом нужный размер текстовому полю, содержащему этот символ - размер больше чем нужный:(

iNils
19.06.2008, 22:08
Во-первых, тогда не понимаю: почему когда делаешь fla, если используешь, например, символ 'А' Tahoma 12px и его же размером 16px, то нужно же вроде делать embedded и для размера 12 и для 16.Не нужно. Возможно речь идет о Bitmap Text, но и там можно использовать любой размер, просто качественно он будет выглядить дря размеров кратных базовому. Но на то он и Bitmap Text
Во-вторых, никак не могу сделать, чтобы отрисованные мной символы совпадали с нужным размером. Если генерирую контур символа из шрифта размером 1024px, то отрисовывается с очень хорошим по точности качеством, но когда задаю потом нужный размер текстовому полю, содержащему этот символ - размер больше чем нужныйРазмер поля всегда больше, чем размер символа в нем.

Whim
20.06.2008, 16:14
я отрисовываю символ в масштабе относительно рамок 1024x1024(как требует спецификация)
Потом использую этот символ в текстовом поле. Тексту установлена высота шрифта, например, 44
Pядом располагаю поле для сравнения, которое использует тот же шрифт, но из системы(т.е. не embedded), высота шрифта тоже 44px.
И мой отрисованный символ получается больше по размерам.
Значит что-то я делаю не так, а что не могу понять никак:(

iNils
20.06.2008, 17:19
Device font и из ситсемы, во флеше могут отличаться по размерам, не ориентируйтесь на них. Ориентируйтесь на встроенные во флеш.

Whim
20.06.2008, 18:35
Но как же так: 2 поля текстовых(в одном device font, в другом glyph font) с одинаковым размером шрифта - но в одном он заметно больше - это как-то неправильно

iNils
20.06.2008, 18:41
За device font отвечает система, а не плеер.

Whim
20.06.2008, 19:29
А за glyph font отвечаю я:) и явно масштабирую его неправильно

Whim
23.06.2008, 14:39
Я сравнила координаты отрисовки контуров символа как их делает flash и как получаю я. Коэффициент отличия получился ровно 0.75
0.75 - это 72/96. 96-это dpi(dots per inch) моего монитора. 72-получается использует flash.
Как думаете, мое предположение верно?

etc
23.06.2008, 15:00
Врядли, потому как такой характеристики, как dpi, в swf-файле нет.

iNils
23.06.2008, 18:49
Давайте вы покажите пример того, что получается (на 12 и 16 символов в input поле с рамкой), а то тут врядли кто-то вручную шрифты генерил и поэтому на словах сложно понять.