Подтвердить что ты не робот

Как предотвратить перемещение текста для некоторых шрифтов на иностранном языке?

У меня есть многоязычный проект (в настоящее время - 13 языков), который использует множество различных вариантов шрифтов "Helvetica Neue", в основном смелые, сжатые и регулярные сокращения из набора шрифтов LinoType Pro (включая западные европейские символы) и то же самое для кириллица. Вероятно, мы добавим китайские и японские вариации в будущем.

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

Все это хорошо работает, за исключением одной проблемы: по какой-то причине все кириллические буквы, кажется, смещены. Они отображаются на 2-3 пикселя ниже правильной базовой линии и фактически выступают через нижнюю границу текстового поля, даже если для поля установлено значение автосохранения. Когда я использую textfield.getCharBoundaries(), все значения кажутся правильными, хотя они явно не отображаются правильно.

Чтобы все выглядело аккуратно, я мог бы вручную переместить все проблемные текстовые поля вверх или вниз в зависимости от языка и размера шрифта, но мне было интересно, есть ли способ предотвратить или хотя бы обнаружить такое перемещение, чтобы автоматически обрабатывать настройки - у Flash Player должна быть какая-то информация о том, как вещи отображаются, не так ли? У кого-нибудь из вас были подобные проблемы? Или еще лучше: решение?

4b9b3361

Ответ 1

У меня была эта проблема для китайца, но только в OS X против Windows. Я не мог понять, как автоматически получить надлежащие показатели для того, где действительно были персонажи. Я закончил с грубой функцией, которую я вызывал всякий раз, когда я настраивал TextField:

  public static function adjustPositioning(field:TextField):void
  {
    if(OS != "MAC") return;
    var fontSize:int = field.defaultTextFormat.size as int;
    field.y += fontSize/5;
  }

Я настраивал все свои текстовые поля в коде, а не на IDE, так что это было легко. Я думаю, это решение, которое вы не ищете, хотя!

Ответ 2

В вашей версии Helvetica Neue есть глифы для кириллицы? Если нет, то вы получите откат шрифта, а шрифт, используемый для русского, на самом деле не Helvetica Neue, а что-то еще, с другими метриками. И у вас будет больше этого, если вы пойдете на китайский язык, потому что Helvetica Neue определенно не содержит китайских глифов: -)

С другой стороны, действительно-действительно рассматриваем TLF. Это лучше подходит для международной поддержки, а Flash Player 10.0 (который вводит TLF) уже более 2,5 лет. Попытайтесь убедить своих клиентов, что необоснованно запрашивать международную типографию высокого уровня с использованием древних технологий. Это либо/или сделка.

Ответ 3

У меня возникла аналогичная проблема с арабским языком. Похоже, что приложения Adobe всегда имеют проблемы с неанглийскими языками. На некоторых языках в Flash-проигрывателе текст выглядит поврежденным, но при воспроизведении Flash в Flash Player проблема не существует.

Я не уверен, что может быть решением вашей проблемы, но вы можете попробовать некоторые работы.

Попробуйте эту работу, но она усложняется: - при каждом нажатии клавиши вставьте нажатый символ в качестве изображения. Он может решить вашу проблему, но потребуется больше времени для написания кода

Ответ 4

У меня были подобные проблемы, и все решения, которые я пробовал, довольно сложны или имеют некоторый недостаток:

  • Используйте TLF. Я знаю, что ты не хочешь, но это довольно безопасный (но сложный) Решение.

  • Не используйте "сглаживание" сглаживания, используйте "анимацию". Шрифты будут выглядеть хуже, но их показатели должны быть немного более надежным.

  • Попробуйте использовать cacheAsBitmap или null фильтров (т.е. BlurFilter (0,0,0)). Это будет работать в некоторых случаях, но не для всех.

  • Вручную кэшировать все текстовые поля как BitmapData. Это должно показать много более надежных показателей, но может быть сложно. Вы даже можете исправить это на летать с помощью getColorBounds, чтобы получить "реальные" метрики. Но опять же, все очень сложно, и требует много тестирования.

Ответ 5

Похоже, шрифт, который вы используете, имеет фактическую ошибку в глифах для кириллицы. Итак, здесь жестоко простое, но раздражающее решение. Отредактируйте шрифт. Это звучит безумно, но не так много кириллических глифов, и вам, кажется, нужен один шрифт. Отредактируйте его, распространите исправленную версию, и все готово.

Fontforge довольно приличный, я готов поспорить, вы можете отредактировать шрифт через час после того, как вы настроились.

Ответ 6

Пробовал ли вы просто изменять шрифт для настройки 1px или около того. Просто сдвиньте буквы вверх (или вниз), я не совсем прочитал все, что все писали. Хотя в настоящее время я его не установил, я полагаю, что мои предпочтения для редакторов - это "Fontlab".

Ответ 7

Вы пытались использовать шрифт с фиксированной шириной?