PDA

Просмотр полной версии : Внедрение шрифта


Ri4a33
15.03.2007, 02:36
ну понятно, что вопрос пойдёт о шрифте во флеше... - а точнее у меня такая проблема - я делаю Флеш-сайт с нестандартными шрифтами, и на пк без этих шрифтов, они заменяются на "дефаулт". как мне это предотвратить, можно ли чтобы они сохронялись как картинка? а анимация с текстом как анимация? крч. как сделать чтоб шрифт в браузере не изменялся?

iNils
15.03.2007, 03:09
Шрифты заменяются только если у вас динамическое поле, чтобы это не происходило надо внедрить шрифты в swf. Для этого надо выбрать текстовое и в панели его свойств нажать кнопку Embed, после чего указать необходимый диапазон символов (можно необходимые символы вбить вручную). Например Cyrillic (не выбирайте All, так как будут внедрены все символы шрифта, а это могут мегабайты лишнего веса)

CorC
15.03.2007, 10:13
вот тут даже инструкция написана
и пример выложен
http://flasher.ru/forum/showthread.php?t=93010

this.create
15.03.2007, 10:45
как мне это предотвратить, можно ли чтобы они сохронялись как картинка? Моно так же сделать текстовые поля типа static. При этом символы в таком поле запоминаются флэшем как векторные рисунки. Недостаток - нельзя изменять впоследствии, при значительном размере текста лишний "вес" swf. Достоинства - векторные картинки, значит можно масштабировать не теряя в качестве, при небольшом количестве текста "вес" swf почти такой же как при встройке символов( или даже меньше).

iNils
15.03.2007, 10:58
Моно так же сделать текстовые поля типа static. При этом символы в таком поле запоминаются флэшем как векторные рисунки. Недостаток - нельзя изменять впоследствии, при значительном размере текста лишний "вес" swf. Достоинства - векторные картинки, значит можно масштабировать не теряя в качестве, при небольшом количестве текста "вес" swf почти такой же как при встройке символов( или даже меньше).Что за бред? Что в статическом поле, что в динамическом внедряется во флеш шрифт. И на вес существенно влияет количество внедренных символов, а не количество текста.

CorC
15.03.2007, 10:59
встраивать можно не все символы текста
в окне свойств можно выбрать лишь нужное
и не надо заморачиваться со статиком
но для этого новый шрифт придется создать

iNils
15.03.2007, 11:14
Какой новый шрифт?

CorC
15.03.2007, 12:42
я всмысле про new font в библиотеке
типа лишний обьект :)

iNils
15.03.2007, 12:52
Я где то на днях писал, что шрифт в библиотеки, это самое последнее дело.

etc
15.03.2007, 13:00
Шрифт в либе — зло.

pkfun
15.03.2007, 19:51
Что за бред? Что в статическом поле, что в динамическом внедряется во флеш шрифт. И на вес существенно влияет количество внедренных символов, а не количество текста.
Ну что ж, каждый может ошибиться. Запомним.

screamge
15.03.2007, 20:20
а какое объяснение того что фонт в либе зло, если только это объяснение не вес?

etc
15.03.2007, 20:28
Попробуй добавить кириллический диапазон.

screamge
15.03.2007, 21:17
а мне его добавлять ни разу не приходилось и думаю ещё долго не придётся...по этому чесно говоря не понимаю критики по внедрению шрифтов в библиотеку

etc
15.03.2007, 21:38
а мне его добавлять ни разу не приходилось
Вот когда придется (очень странно, что раньше не приходилось), тогда и узнаешь.

screamge
15.03.2007, 21:49
всё очень просто....я не делаю русскоязычные сайты.

etc
15.03.2007, 22:00
Слава богу :D
Даже если и не русскоязычные, все равно, шрифт в либе не предоставляет возможностей зашивки в обычном поле.

screamge
15.03.2007, 22:06
вопрос чисто теоритический....что если есть много динамических полей? проставлять каждому ембед?

to _etc: только не надо отправлять меня искать по всему форуму или тыкать в sharedfonts.

etc
15.03.2007, 22:09
Да, выставлять каждому embed, но необязательно для всех полей указывать все диапазоны, достаточно одному полю указать нужные, а остальным хотя бы один символ, чтобы сделать у них embedFonts = true.
Причем, это не зависит от того, как был импортирован шрифт, в поле с указанными диапазонами или кривым методом импортирования в либу (где только определенные диапазоны будут внесены).

screamge
15.03.2007, 22:12
а если на лету нужно менять шрифт? что заного делать динамик поля?

etc
15.03.2007, 22:17
HTML, CSS и TextFormat никто не отменял. У поля есть только свойство embedFonts. Оно или true или false. Если необходимые шрифты в ролике есть, то они будут использованы при embedFonts = true. Если нет, то при true символы данного шрифта не будут показаны.

screamge
15.03.2007, 22:29
ладно, согласен...кирилические шрифты подлючать через либ вредно.

iNils
15.03.2007, 23:06
Внедрение шрифта в библиотеку, лишает вас гибкости в выборе диапазона символов.

Сделаем небольшой пример. Внедрим стандартный Arial в библиотеку, смотрим на размеры и внедряемый диапазон.

Размер: 51327 байт
Символов: 1545
17297
17298
Как видим, N-е количество символов нами вообще не используются, но тем не менее они включены в swf.

Теперь внедрим через текстовое поле. Для нас актуальны два диапазона: Basic Latin + Cyrillic

Размер: 27509 байт
Символов: 593
17299
Размер упал фактически в два раза! Но все равно есть символы, которые нам совсем не нужны.

Но у нас есть хорошая возможность повлиять на это. Конечно можно ручками вбивать символы в специальное отведенное поле на панели выбора диапазона, но это не удобно, особенно когда вы используете множество полей.
Для этого надо отредактировать UnicodeTable.xml, вбив свой диапазон. Подробнее об этом можно прочесть тут (http://www.flash-mx.ru/forum/topic_show.pl?tid=1624).

Мой набор включает в себя 212 символов, включая тире, дефис и елочки.

Размер: 21777 байт
Символы (212):
17300
Уменьшили вес еще на 20%. Учитывая, что часто внедряется несколько написаний и пару шрифтов, суммарно вес флешки можно сократить на 50-200 кб. А главное, теперь я внедряю символы 3-я кликами (а не проматываю и не ищу Cyrillic). Есть правда один минус, про который я написал по ссылке выше и об этом не стоит забывать.

screamge
15.03.2007, 23:38
а что делать если имеется к слову несколько loadMovie в которых везде нужен динамик текст? что делать тогда, везде ембдить...пусть даже эти 22 кб

Ri4a33
16.03.2007, 00:01
Спaсибо за выше перечисленную инфу - получилось! :)

iNils
16.03.2007, 02:06
а что делать если имеется к слову несколько loadMovie в которых везде нужен динамик текст? что делать тогда, везде ембдить...пусть даже эти 22 кбВ примере есть два swf со вшитыми шрифтами font705.swf и font706.swf, где внедерены символы согласно моему собственному диапазону. Также есть два fla main.fla и load.fla. Первый подгружает в себя библиотеки со шрифтами и файл (пример внешнего swf где надо назначить шрифт). В обоих fla нет внедренного шрифта. Но нажимая кнопки с названиями шрифтов, мы подключаем их к текстовому полю загруженному из load.swf.

PS. Добавил файл font705.fla в качестве примера создания файла-библиотеки шрифта.
Скачать (http://www.inils.ru/file/font/) шрифт iFlash 705

screamge
16.03.2007, 02:16
to iNils: очень интересная штука, уменьшаем размер загружаемого файла за счёт уничтожения ненужных символов и загружаем его всего один раз (я имею ввиду sharedlib). Спасибо будемс знать

З.Ы. и самое главное экономим место на жёстком диске, храня вместо 50 кб всего 22!

etc
16.03.2007, 12:21
Я сталкивался с тем, что шрифт в либе не имеет диапазона cyrillic, когда как если зашить в поле, то он есть.

iNils
16.03.2007, 12:25
Мне вообще не понятна логика диапозона в либе. А если мне нужен там арабский или японский?

etc
16.03.2007, 12:50
Я думаю, это зависит от текущего языка системы. Посколько система у меня англоязычная была, то и русский диапазон она из принципа не добавляла.

iNils
16.03.2007, 13:02
Я думаю, это зависит от текущего языка системы. Посколько система у меня англоязычная была, то и русский диапазон она из принципа не добавляла.Хм... сейчас не проверить не могу. Странно, что нельзя там выбирать диапазон, а только начертания.

Mnilionic
04.04.2007, 04:50
пытался повторить выложенный пример с подключением swf с внедрённым шрифтом.
ничего не получается :(

verdana.swf :
на сцене: текстовое поле с внедрёнными символами (для пробы все 160 Кб)

test.swf :
в библиотеке: символ my_font (Identifier = vrdn, Import for runtime = verdana.swf)
на сцене: текстовое поле txt (Arial, 12px) и символ my_font
AS:
txt.embedFonts = true;
var frmt = new TextFormat();
frmt.font = "verdana";
txt.setTextFormat (frmt);
txt.setNewTextFormat (frmt);

в verdana.swf запихал текстовое поле в символ и поставил ему Export for runtime.

Символ импортируется тепрерь, но текст в целевом поле не появился.

скриптом перебираю свойства текстового поля в импотируемом символе.
оказывается шрифт там называется не Verdana, а Verdana_11pt_st.
Это я должен был угадать?
Если это название подставить в скрипт форматирования текстокого поля, то всё работает.
Почему изменилось название шрифта и как его предсказать-то?

etc
04.04.2007, 14:21
Ну у тебя я вижу как минимум две ошибка, первая — название шрифта чувствительно к регистру, а во вторых не нужно было включать Bitmap text.

iNils
04.04.2007, 15:29
Битмап текст, генерирует новый текст заданного размера, подгоняя шрифт под пиксели. Именно поэтому название изменилось:
[Название шрифта]_[размер шрифта]pt_st

Mnilionic
04.04.2007, 18:39
Точняг. Отключил битмэп-текст и заработало.
Только как мне теперь сделать чтоб в целевом текстовом блоке текст отображался попиксельно (битмеп-текст)?
при использовании antiAliasType, gridFitType, sharpness всё равно как-то коряво

etc
04.04.2007, 18:42
Включить обратно Bitmap text и зная схему построения имени шрифта, использовать его.

Mnilionic
04.04.2007, 19:28
тогда получится шрифт только одного кегля?
Ну что ж придётся так.
Спасибо большое

ой.. а что означает суффикс st при образовании нового имени шрифта?

etc
04.04.2007, 20:59
тогда получится шрифт только одного кегля?
Ну что ж придётся так.
Спасибо большое

ой.. а что означает суффикс st при образовании нового имени шрифта?
Да, кегль один.
st? Фиг его знает.

iNils
05.04.2007, 15:53
тогда получится шрифт только одного кегля?Как я уже вышел говорил, шрифт подгоняется под пиксели, и у каждого кегля будет своя подгонка. Поэтому внедряется только указанный размер иначе бы вес swf был бы не предсказуем. Но вполне можно для текстового поля включить галку html, вбить n-символов и для каждого установить свой кегль, например 10,14,15,20 и указать диапазон символов.
ой.. а что означает суффикс st при образовании нового имени шрифта?По началу я думал, что это сокращение от standart и обозначает начертание, но включение bold или italic, ничего не изменило.

Mnilionic
05.04.2007, 19:59
Но если использовать системный шрифт то подгонка под поксели осуществляется независимо от размера шрифта. то есть это происходит в прямом эфире. Почему же тогда флеш не встраивает в себя сами символы шрифта чтоб потом их рендерить в необходимом режиме, а на оборот: сразу встраивает в себя результат конкретного рендеринга.

iNils
05.04.2007, 20:44
Но если использовать системный шрифт то подгонка под поксели осуществляется независимо от размера шрифта. то есть это происходит в прямом эфире. Почему же тогда флеш не встраивает в себя сами символы шрифта чтоб потом их рендерить в необходимом режиме, а на оборот: сразу встраивает в себя результат конкретного рендеринга.
Системный шрифт поэтому и называется системным, потому что за него система отвечает.

etc
06.04.2007, 12:12
Используй пиксельный шрифт и забудь о проблемах.

Mnilionic
06.04.2007, 20:21
__etc, попробую