(почти) идеальные засечки, кернинги и иероглифы / Хабр
Продолжаем серию статей о шрифтах в играх. В первой части мы вспоминали об истории типографики, размышляли о влиянии шрифта на восприятие игры и начали погружаться в формат ttf-файла.
Во второй части мы расскажем, что делать, чтобы буквы не наезжали друг на друга, а все штрихи выглядели правильно. И бонусная сцена для тех, кто останется в зале после титров: хитрости работы со шрифтами для китайских и японских игроков.
FontTools
Светлое будущее наступило с PyPI-библиотекой fontTools, которая устанавливается через pip. Она работает на всех нужных нам платформах (в отличие от FontForge, где нам приходилось танцевать с бубном) и может открывать, создавать, писать таблицы в нужном формате. Но выбирать нужные таблицы, прописывать все значения, правильно копировать глиф — это уже сами. Проделываем те же фокусы, что и с FontForge.
from fontTools.ttLib import TTFont from fontTools.subset import Subsetter def erase_not_used(font_path, source_file, symbols): shutil.copyfile(source_file, font_path) subsetter = Subsetter() subsetter.populate(text=''.join(symbols)) font = TTFont(font_path) subsetter.subset(font) font.save(font_path) font.close() if subsetter.unicodes_missing: # Это символы сердечек, пик и подобных. Они встречаются у нас в тексте, но их нет в исходных шрифтах service_symbols = [(65024, 65039), (13, 13)] missed_symbols = [sym for sym in subsetter.unicodes_missing if not any(beg <= sym <= end for beg, end in service_symbols)] print(f'There are missing glyphs in source font: {missed_symbols}')
Subsetter умный и сам знает, что для составных глифов необходимо оставлять все его части. Более того, он оставляет данные о составном глифе только в виде информации о точках в таблице glyf
, а в других таблицах вырезает упоминание. Основной плюс подобного вырезания в том, что в шрифте остаются все исходные таблицы со всеми кернингами, инструкциями и хинтами. Слияние многих шрифтов в один такого плюса лишено. Нужно за всем следить самим.
class ParsedFont(object): def __init__(self, font_path): self.__file_path = font_path # Открытый текст - TTFont self.font = None # Интересующие нас таблицы self.hmtx = None self.vmtx = None self.glyph_set = None self.glyf = None self.cmap = None self.kern = None self.os2 = None # Таблица имён глифов, связь нового имени и имени в шрифте self.cmap_prepared = None # Связь имени глифа в шрифте и его unicode self.name_uni = None self._is_otf = False self.__prepare() def __prepare(self): self.font = TTFont(self.__file_path) # Пробел в конце не ошибка, таблица имеет тэг "CFF " self._is_otf = 'CFF ' in self.font # Для otf-шрифтов другие таблицы, мы их не сливаем в один if self._is_otf: return self.hmtx = self.font['hmtx'] self.vmtx = self.font['vmtx'] if 'vmtx' in self.font else None self.vhea = self.font['vhea'] if 'vhea' in self.font else None self.glyph_set = self.font.getGlyphSet() self.glyf = self.font['glyf'] self.cmap = self.font['cmap'] self.kern = self.font['kern'] if 'kern' in self.font else None self.os2 = self.font['OS/2'] self.cmap_prepared = {} self.name_uni = {} for table in self.cmap.tables: for sym, sym_nm in table.cmap.items(): sym_hex = hex(sym) hex_name = f'{sym_hex}'.replace('0x', '').upper() # Исправляем имена символов, так как почему-то в некоторых шрифтах решили сделать несовпадающими # ord(unicode) и glyph_name. Действительно, почему бы и нет # Но чтобы в текущем шрифте их найти нужно сохранить и первоначальное имя - будет хранится в synonims[0] true_name = f'u{hex_name}' syms_codes = self. cmap_prepared.setdefault(sym, {'name': true_name, 'synonims': []}) if sym_nm not in syms_codes: syms_codes['synonims'].append(sym_nm) self.name_uni[sym_nm] = sym @property def is_otf(self): return self._is_otf
Во время открытия шрифта подготавливаем таблицу cmap
. В обычном случае давать имена глифам можно любые — это хоть и нужная информация, но стандарт имена никак не регламентирует. Можно хоть букву И назвать в шрифте «кракозябра» — и всё будет работать, на правильное использование и отрисовку шрифта это никак не повлияет. Но для слияния очень важно понимать, какой именно мы обрабатываем глиф, так как таблица у нас сводная. В нашем коде имя заменяется на f’u{Hex}, именно оно будет в подготовленном файле. И также надо сохранить исходное имя, чтобы потом найти информацию о глифе в других таблицах открытого шрифта.
Сбор информации о символе: копирование информации о точках:
from fontTools.pens.ttGlyphPen import TTGlyphPen def add_symbol(sym_ord: int, glyphs_info: Dict, font: ParsedFont): glyph_link = font.cmap_prepared.get(sym_ord) if glyph_link is None: return None glyph_name_font = glyph_link['synonims'][0] glyph = font.glyph_set.get(glyph_name_font) pen = TTGlyphPen(font.glyf) glyph.draw(pen) gl = pen.glyph()
Для копирования точек и кривых в fonttools есть класс TTGlyphPen
: он возьмёт все контуры из глифа и скопирует информацию о компонентах. Но если не добавить в новый шрифт сами компоненты, мы получим в итоге пустой либо недостоверный символ (то же самое поведение, что при удалении лишних символов).
Сбор информации о символе: разбираемся с компонентами
if gl.isComposite(): add_error = True compound_names = {} # component names for gl_component in gl.components: comp_sym_ord = font.name_uni.get(gl_component.glyphName) if comp_sym_ord is None: break sym_name = add_symbol(comp_sym_ord, glyphs_info, font) if sym_name is None: break compound_names[gl_component.glyphName] = sym_name else: add_error = False # В новом шрифте возможно будет другое имя, заменяем его на него for gl_component in gl.components: gl_component.glyphName = compound_names[gl_component.glyphName] if add_error: fallback_composite_add(gl, font.glyf)
Мы рекурсивно вызываем
, чтобы не пропустить глифы, которые включают в себя глифы, которые включают в себя глифы, которые… Ну вы поняли 🙂 Также обязательно заменяем имя глифа в информации о компоненте, так как в шрифт у нас попадает глиф с нормализованным именем.
Ещё один трюк — fallback_composite_add
. Помните, как Subsetter красиво вырезал глифы, не записывая информацию в cmap и другие таблицы? Это как раз обработка такого случая.
from fontTools.ttLib.tables import ttProgram def fallback_composite_add(gl, glyf): coords, end_pts, flags = gl.getCoordinates(glyf) gl.coordinates = coords gl.endPtsOfContours = end_pts gl.flags = flags del gl.components gl.numberOfContours = len(end_pts)
Метод gl.getCoordinates собирает все точки и контуры, которые используются в глифах-компонентах, и возвращает полный вариант. Другими словами, мы заменяем ссылку на глиф самим глифом.
Следующая часть, которая нас интересует, — инструкции. Эта та штука, которая позволяет попасть глифу в пиксельную сетку красиво. Без них получится что-то такое (погружение в тему).
if hasattr(glyph._glyph, 'program'): gl.program = deepcopy(glyph._glyph.program) else: gl.program = ttProgram.Program() gl.program.fromBytecode([])
Если вы играли в старые версии Fishdom, то, возможно, замечали, что буквы i, j, t, f частенько друг на друга накладывались.
А это всё потому, что нет времени объяснять, давай релизить! не копировалась информация о кернингах. В этой таблице для некоторых символов сохраняются отступы к другим символам-соседям. Внутреннее устройство таблицы может быть в нескольких форматах, мы поддерживаем только упорядоченные кернинг-пары.
def get_symbol_kerns(glyph_name, kern, name_uni): if kern is None: return None kerns = [] for kern_table in kern.kernTables: # Поддерживаем только формат 0: упорядоченные пары if kern_table.format != 0: continue pairs = [] for kern_pair in kern_table.kernTable: if kern_pair[0] == glyph_name: pairs.append((name_uni.get(kern_pair[1]), kern_table[kern_pair])) if pairs: kerns.append({'coverage': kern_table.coverage, 'pairs': pairs}) return kerns
Осталось только всё это записать в нашу сводную таблицу glyphs_info
. Дополнительно указав метрики горизонтальных интервалов (hmtx).
new_name = glyph_link['name'] glyphs_info[sym_ord] = { 'name': glyph_link['name'], 'hmtx': font.hmtx[glyph_name_font], 'kern': get_symbol_kerns(glyph_name_font, font.kern, font.name_uni), 'glyph': gl }
Теперь настала очередь готовить наш шрифт! Сначала собираем информацию в glyphs_info
.
def merge_fonts(font_path: str, source_files: List[str], symbols, metrics_source, font_name): glyphs_info = {} found_symbols = [] for source_path in source_files: font_add = ParsedFont(source_path) if font_add.is_otf: print(f'[ERROR] Merge of otf fonts does not supported.') return for symbol in symbols: sym_ord = ord(symbol) if add_symbol(sym_ord, glyphs_info, font_add): found_symbols.append(symbol)
После сбора необходимо обратно развернуть в таблицы всё собранное уже для конечного файла шрифта.
glyphs = [] character_map = {} h_metrics = {} glyphs_setup = {} kerns = {} ord_name_links = {} for sym_id, gl_info in glyphs_info.items(): gl_name = gl_info['name'] ord_name_links[gl_name] = sym_id # Таблицы cmap, glyf и htmx character_map[sym_id] = gl_name h_metrics[gl_name] = gl_info['hmtx'] glyphs.append(gl_name) glyphs_setup[gl_name] = gl_info['glyph'] # Генерирования информация для kern-таблицы, которая отдельно записывается kern_info = gl_info['kern'] if kern_info is not None: for kern_coverage in kern_info: coverage = kern_coverage['coverage'] kern_table = kerns.setdefault(coverage, {}) for pair in kern_coverage['pairs']: # возможно, что символ для кернинга не нужен в результирующем шрифте if pair[0] not in glyphs_info: continue pair_gl_name = glyphs_info[pair[0]]['name'] kern_table.update({(gl_name, pair_gl_name): pair[1]})
Так как мы сливаем не все глифы, то при сохранении кернингов ещё проверим, что глиф из связки в принципе попадает в итоговый шрифт. Если нет — не сохраняем эту кернинг-пару.
fb = FontBuilder(unitsPerEm=1024, isTTF=True) fb.setupGlyphOrder(glyphs) fb.setupCharacterMap(character_map) fb.setupGlyf(glyphs_setup) fb.setupHorizontalMetrics(h_metrics) metrics_font = ParsedFont(metrics_source) if metrics_source is not None else None metrics = get_metrics(metrics_font) fb.setupHorizontalHeader(**metrics.hhea) font_name = font_name.replace(' ', '') setup_name_table(metrics_font=metrics_font, font_builder=fb, font_name=font_name) fb.setupOS2(**metrics.os2) setup_kern_table(fb.font, kerns) setup_hints(metrics_font=metrics_font, font=fb.font, logger=logger, font_name=font_name) fb.setupPost() fb.save(font_path)
Часть работы за нас делает FontBuilder из пакета fonttools, принимая питоновские dict. Но некоторые вещи нужно учитывать в своём коде.
Кернинги. Нужно перенести наши записи в таблицу. В нашем случае было логичным писать в том же формате, в котором мы читаем, не углубляясь в дебри документации.
from fontTools.ttLib.tables._k_e_r_n import KernTable_format_0 def setup_kern_table(font, kerns): ttf_kern_table = newTable('kern') ttf_kern_table.version = 0 ttf_kern_table.kernTables = [] for coverage, kern_table in kerns.items(): ttf_kern_value = KernTable_format_0(apple=False) ttf_kern_value.coverage = coverage ttf_kern_value.format = 0 ttf_kern_value.kernTable = kern_table ttf_kern_value.tupleIndex = None ttf_kern_value.version = 0 ttf_kern_table.kernTables.append(ttf_kern_value) font['kern'] = ttf_kern_table
Таблицы для хинтов. Это набор из таблиц fpgm
, prep
, cvt
, maxp
, которые определяют общие инструкции для всего шрифта. Нужно это для того, чтобы символы не слипались в комок при уменьшении (вот тут прям подробно). Помните первую картинку с приветственного экрана Gardenscapes?
Мы как раз теряли хинтинг. Возвращаем на место — setup_hints
. Для этого нам нужен шрифт, откуда брать инструкции — metrics_font
. Если его нет, тогда пропускаем шаг, так как автоматом генерировать такое — слишком даже для нас.
def setup_hints(metrics_font, font, font_name): if metrics_font is None: return fpgm = metrics_font.font['fpgm'] if 'fpgm' in metrics_font.font else None prep = metrics_font.font['prep'] if 'prep' in metrics_font.font else None cvt = metrics_font.font['cvt '] if 'cvt ' in metrics_font.Заметки для Windowsfont else None maxp_src_table = metrics_font.font['maxp'] if 'maxp' in metrics_font.font else None # Строгое условие, всё хорошо - нам просто не надо ничего копировать if fpgm is None and prep is None and cvt is None: return if fpgm is None or prep is None or cvt is None: print(f'[WARNING] Expected prep+cvt+fpgm tables in source font: fpgm="{fpgm is not None}"; ' f'cvt="{cvt is not None}"; prep="{prep is not None}"') return fpgm_table = newTable('fpgm') fpgm_table.program = fpgm.program font['fpgm'] = fpgm_table cvt_table = newTable('cvt ') cvt_table.values = cvt.values font['cvt '] = cvt_table prep_table = newTable('prep') prep_table.program = prep.program font['prep'] = prep_table maxp_table = font['maxp'] maxp_table.maxZones = maxp_src_table.maxZones maxp_table.maxStorage = maxp_src_table.maxStorage maxp_table.maxFunctionDefs = maxp_src_table.maxFunctionDefs maxp_table.maxTwilightPoints = maxp_src_table.
maxTwilightPoints maxp_table.maxStackElements = maxp_src_table.maxStackElements maxp_table.maxInstructionDefs = maxp_src_table.maxInstructionDefs if maxp_table.maxFunctionDefs == 0: print(f'[WARNING] [{font_name}] There are instructions in font but functionDefs in "maxp" table == 0') if maxp_table.maxStackElements == 0: print(f'[WARNING] [{font_name}] There are instructions in font but maxStackElements in "maxp" table == 0')
Если шрифт используется на Windows, то для правильной работы обязательно нужна запись os/2, а имя шрифта в соответствующем поле должно быть без пробелов.
def setup_name_table(metrics_font, font_builder, font_name): style_name = "TauStyle" if metrics_font is not None and 'name' in metrics_font.font: # Берём имя стиля из таблицы шрифта для метрик, если он есть style_name_record = metrics_font.font['name'].getName(nameID=2, platformID=3, platEncID=1, langID=1033) \ or metrics_font.font['name'].getName(nameID=2, platformID=3, platEncID=1, langID=None) if style_name_record is not None: style_name = style_name_record.toUnicode() name_strings = dict(familyName=dict(en=font_name), styleName=dict(en=style_name), uniqueFontIdentifier=f'tau_empire:{font_name}', fullName=f'{font_name}', psName=f'{font_name}', version='Version 0.1') font_builder.setupNameTable(name_strings)
Высший пилотаж для китайских и японских игроков
Если в вашем приложении есть китайская и японская локализация, то высшим пилотажем будет подготовить для них отдельные шрифты.
Китайские и японские иероглифы сильно отличаются, хоть и имеют одно происхождение — японские символы изначально были заимствованы из китайского языка. С тех пор возникли заметные различия в написании, а с появлением компьютеров каждая нация разработала собственные шрифты, которые передают нюансы в начертании.
А если использовать один и тот же шрифт, то велика вероятность, что пользователи почувствуют то же, что чувствуем мы, когда видим такие вывески:
У нас в играх используется система приоритета символов в загружаемых шрифтах. Она работает с двух сторон.
Движок при загрузке может переопределять символы на лету и для японской локализации добавлять шрифт, собранный специально для японской локали.
<!-- Для всех локализаций --> <Locale> <Font name="HanSansNormal" /> </Locale> <!-- Для японской отдельно загрузим сверху шрифт. А уже встречающиеся символы перекроем --> <Locale lang="ja"> <Font name="HanSansNormal"> <SubFont name="HanSansNormal_diff_ja" extenstionMode="Override" /> </Font> </Locale>
Система сборки: имеет встроенный приоритет исходных шрифтов, который мы уже реализовали в функции merge_fonts
. Каждый следующий шрифт перезатирает символ, который был из предыдущего. То есть самый последний — самый главный. Этот порядок определяется в конфигах проекта.
<font> <SourceFonts type="common"> <source path="PoetsenOne.ttf" /> <source path="Ubuntu.ttf" /> <source path="FDCustomHSNormal.ttf" /> </SourceFonts> <SourceFonts> <source path="SourceHanSans-Normal.ttf" /> <source path="SourceHanSansSC-Normal.ttf" /> <source path="SourceHanSansK-Normal.ttf" /> </SourceFonts> <SourceFonts> <source path="SourceHanSansSC-Normal.ttf" /> <source path="SourceHanSansK-Normal.ttf" /> <source path="SourceHanSans-Normal.ttf" /> </SourceFonts> <Generate> <font path="font/HanSansNormal.ttf"> <symbols /> <source /> <source /> </font> <font path="font/HanSansNormal_diff_ja.ttf"> <symbols /> <source /> <source /> </font> </Generate> </font>
А так как шрифт для японского получается очень мелким (собираются же только символы для японских текстов), то мы получаем минимальный размер с одной стороны и гибкость настройки — с другой.
Заключение
Мы получили гибкую в настройке систему и забрали боль починки багов с проектов в общую команду технологий. Теперь страдаем копаемся в документации и внутренностях только мы, а коллеги могут делать игры быстрее и лучше, не заботясь о таких деталях.
Полный код двух статей можно посмотреть в нашем публичном репозитории. А пока — не отказывайте себе в удовольствии и пишите в комментариях, что ещё хотите узнать о работе со шрифтами.
Если вместо букв — иероглифы, квадратики и цифры. Часто после установки на компьютере некоторых приложений, их русификации, обновления и т.д., в определенных окнах этих приложений а также в окнах самой операционной системы неправильно отображаются шрифты. Как правило, это не сказывается на стабильности работы компьютера, зато создает кучу неудобств пользователям, поскольку в окнах вместо букв отображаются иероглифы, квадратики, цифры и прочие непонятные им символы.
Значительная часть пользователей решают проблему радикально — переустанавливают Windows или же несут компьютер в мастерскую. Хотя часто из сложившейся ситуации можно выйти гораздо проще. Конечно, предложенный автором способ не является панацеей, но в большей части случаев он решает проблему. Для начала, убедитесь в правильности настройки языков и региональных стандартов:
(пункты в скобках иногда могут отсутствовать)
Если на компьютере указанные настройки уже были выполнены или после их осуществления проблемы с отображением шрифтов не исчезли, необходимо внести некоторые изменения в системный реестр. Системный реестр— очень важный элемент операционной системы. Поэтому: Для решения проблемы с отображением шрифтов в Windows XP нужно изменить значение параметров «1250» и «1252», которые находятся в ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage, с «c_1250.nls» на «c_1251.nls» и с «c_1252.nls» на «c_1251.nls» соответственно. Как это сделать:
После перезагрузки проблема с неправильным отображением шрифтов должна исчезнуть.
|
Google Noto: коллекция шрифтов с иероглифами | Шрифты | Египетский
В стремлении согласовать постоянно разрозненные технологии, которые мы используем для подключения к Интернету, Google разработал возможно, самую полную коллекцию шрифтов. Под зонтичным названием Google Noto цель коллекции – включить все символы Юникода и (бесплатно).
Говорят:
Когда текст обрабатывается компьютером, иногда символы отображаются как «тофу». Это маленькие квадратики, указывающие на то, что на вашем устройстве нет шрифта для отображения текста.
Google разрабатывает семейство шрифтов Noto, целью которого является поддержка всех языков с гармоничным внешним видом. Noto — это ответ Google на тофу. Название noto должно передать идею о том, что цель Google — увидеть « нет больше до фу». Noto имеет несколько стилей и весов и доступен бесплатно для всех.
Есть четыре шрифта, которые будут интересны египтологам:
- Google Noto Sans Egypt Hieroglyphs
- Google Noto Sans Coptic
- Google Noto Sans и Google Noto Serif (отдельного шрифта для транслитерации не существует, поскольку все символы транслитерации являются стандартными символами Юникода, содержащимися в шрифтах Sans и Serif)
Google Noto Sans Egypt Hieroglyphs
5 иероглифический шрифт обширен.

Неплохо!
Ниже приведен образец, который я собрал (позаимствовал со стр. 36 книги Кольера и Мэнли « Как читать египетские иероглифы» ), показывающий иероглифы в сравнении с набором шрифтов профессионального уровня LaserHieroglyphics.
Google Noto Egypt Hieroglyphs + Google Noto Sans (для транслитерации)LaserHieroglyphics Я не возился с иероглифами, чтобы правильно распределить их по группам; Я просто поставил их один за другим, чтобы посмотреть, как они сидят. Глифы Google Noto немного запутаны в том, как они выстраиваются в линию. Некоторые глифы также, на мой взгляд, немного большеваты, например, рука и нога.
Кроме того, это всего лишь дело вкуса, какой из них вы предпочитаете.
Google Noto Sans для транслитерации
Используя приведенный выше пример, я думаю, что транслитерация с использованием Google Noto Sans имеет определенный современный стиль. Я использовал шрифт Sans, но вы также можете использовать шрифт Serif, чтобы он больше походил на обычные шрифты транслитерации, которые мы привыкли видеть в книгах.
Недостатком использования шрифтов Google Noto для транслитерации является трудоемкость по сравнению с (также бесплатным) шрифтом Transliteration. Чтобы создать приведенную выше строку транслитерации, мне пришлось выбрать каждый глиф из панели глифов. При использовании шрифта Transliteration, поскольку он использует эквиваленты Manuel de Codage на клавиатуре, набирать его действительно очень быстро.
Для тех из нас, у кого есть веб-сайты, поскольку для шрифта Transliteration используется стандартная клавиатура, вы можете загрузить шрифт на свой сервер и воспроизвести транслитерацию в виде живого текста очень быстро, вместо того, чтобы создавать и загружать файл jpg:
Htp -di-nsw Asir nb Ddw nTr aA nb AbDw
Вы, конечно, можете загрузить шрифт Google Noto (или любой другой стандартный шрифт, содержащий символы, если позволяет лицензия) и сделать то же самое, но вам все равно придется копировать и вставьте глифы вместо того, чтобы просто печатать. Опять же, гораздо более трудоемко.
(Я также загрузил иероглиф шрифта, но не смог отобразить иероглифы. Если кто-нибудь знает, как заставить это работать на веб-сайте, сообщите мне об этом в разделе комментариев.)
Google Noto Coptic
Шрифт Google Noto Coptic очень приятный. Это кажется всеобъемлющим, и вы можете добавить надлинейный штрих (линию, которая добавляется над некоторыми согласными), добавив глиф штриха после ввода буквы. Штрихи расположены левее, чем вы ожидаете, поэтому они появляются над предыдущим глифом, а не в отдельном пространстве.
Вот панель глифов со всеми доступными знаками:
А вот образец, который я взял из Lambdin’s Introduction to Sahidic Coptic (стр. 145), в сравнении со шрифтом New Athena Unicode, который я использовал при наборе JD Ray’s Demotic Ostraca для EES:
Google Noto CopticNew Athena UnicodeЕго было легко и быстро установить, главным образом потому, что, в отличие от шрифта Sans, в коптском шрифте не так много глифов, через которые нужно было бы просматриваться. Итак, хотя мне и пришлось выковыривать глифы из панели, это не заняло особо много времени. И, опять же, я думаю, что шрифт довольно стильный.
Зачем использовать шрифты Google Noto?
Уже есть шрифты для установки иероглифов, транслитерации и коптского языка, так какие же преимущества несут шрифты Google Noto?
Основным преимуществом программы является то, что она бесплатна, полностью лицензирована, и вы можете использовать ее для добавления иероглифов и коптского языка в Документы Google и другие приложения Google через карту символов.
Кроме того, это вопрос эстетических предпочтений и возможности придать документам более гармоничный вид при использовании комбинации шрифтов. Существуют бесплатные шрифты для иероглифов, транслитерации и коптского языка, все они легко доступны, поэтому Google Noto — еще один, который можно добавить к этому миксу.
Однако следует отметить, что ранее я слышал о пользователях Mac, испытывающих проблемы с использованием иероглифических шрифтов и приложений (таких как JSesh), поэтому мне было бы интересно узнать от пользователей Mac, работают ли шрифты Google Noto. хорошо для них.
Потенциал коллекции Noto для стандартизации текста на веб-сайтах, в социальных сетях, почтовых службах, электронных книгах и т. д. представляет настоящий интерес. Еще в 2014 году я писал о проблемах рендеринга транслитерации на цифровых платформах и о тенденции использовать Manuel de Codage вместо этого ради скорости и эффективности. Я надеюсь, что Google Noto и его предполагаемая стандартизация станут шагом к решению этих проблем.
Хотите сотрудничать?
Я могу сфотографировать ваши артефакты и создать эффектные, детализированные изображения для использования на выставках, в печатных и онлайн-публикациях
Нажмите здесь, чтобы узнать больше
Если вам понравился этот пост …
… и вы хотели бы стать smr ttSrj – Другом Тетишери – вы можете:
- Нажмите на сердечко чуть выше ↑ мысли, комментируя ниже ↓
- Поделитесь этой страницей с друзьями в вашей любимой социальной сети, используя кнопки ниже ↓
- Прочитайте некоторые из моих историй о том, как я фотографировал артефакты, от крошечных амулетов до двухметровых гробов
- Запишитесь на сеанс наставничества со мной для развития собственных фотографических навыков
- Станьте спонсором, вступив в Общество Крошечного Египта или сделав разовое пожертвование
- Посмотрите, что я предлагаю в моем интернет-магазине
- Подпишитесь на мою рассылку, чтобы получать мой ежемесячный информационный бюллетень (никакого спама и ложной информации, обещаю):
Если вы не уверены, стоит ли подарить мне свой адрес электронной почты, вы можете прочитать мои прошлые информационные бюллетени по электронной почте, прежде чем принять решение.
Спасибо 🙏
Если не указано иное, все фотографии в этом посте принадлежат Джулии Торн. Если вы хотите использовать какие-либо из моих фотографий в лекции, презентации или записи в блоге, пожалуйста, не просто берите их; напишите мне письмо через мою контактную страницу. Если вы поделитесь ими в социальных сетях, я был бы признателен за ссылку на этот сайт или на одну из моих учетных записей в социальных сетях. Спасибо!
Последние сообщения
Неземная встреча с «Другим местом» Энтони Гормли
Иногда появляется возможность, которую просто нельзя игнорировать; когда вам нужно просто бросить все, что вы делаете, и просто заняться этим.
Это случилось со мной одним январским утром, когда я проснулся и обнаружил, что день окутан необычайно тяжелым плащом тумана.
Подробнее »
19 Января 2022 1 комментарий
Генезис фотографии: портрет Хатор
Люди нередко находят утешение в творчестве, когда переживают трудные времена в своей жизни. Для меня фотография была тем, что помогло мне справиться с трудным периодом моей жизни. В 2015 году мне поставили диагноз синдром хронической усталости (ME/CFS), болезнь, из-за которой я истощаюсь и не могу делать многие вещи, которые раньше считала само собой разумеющимися.
Я нашел облегчение в фотографии, когда начал по-настоящему изучать этот вид искусства через несколько месяцев после того, как мне поставили диагноз.
Подробнее »
20 сентября 2021 4 комментария
Назир Танбули, египетский художник, на фестивале арабского искусства в Ливерпуле.
Если бы я попросил вас представить себе день культурного фестиваля в центре города, что бы пришло вам на ум? Музыка? Толпы? Еда? Танцы? Всесторонний сенсорный удар зрения, звука, запаха и вкуса?
Возможно. Я мог бы.
Но, возможно, не ощущение мира, покоя, медитации и внимательности.
Когда я фотографировал Ливерпульский фестиваль арабского искусства 2016 года, это был праздник чувств. Но при всех цветах, музыке, танцах и еде мне особенно запомнился один из самых тихих артистов: Назир Танбули.
Подробнее »
16 марта 2021 Комментариев нет
Египетские иероглифы Metal Stamp Font by Font Fixation
ОПИСАНИЕ
РЕКОМЕНДАЦИИ
ОТКАЗ
ГАРАНТИЯ
ОТЗЫВЫ
Нам не нужен Анубис, чтобы вернуть египетские иероглифы из мертвых! Тенденция такова, что символы ВНУТРИ, а кто не любит немного загадок? Как и в случае с секретным языком, наши иероглифы получены от различных египетских экспертов, и для каждой буквы был выбран согласованный дизайн. Как вы знаете, в те времена у египтян не было англо-американского алфавита, поэтому многие из этих символов являются «близкими к звуку», а не реальным представлением буквы. При этом есть несколько дубликатов штампов, поскольку не все 26 букв, какими мы их знаем, существуют в иероглифах.
H Вот классный кусочек знаний:
Если бы вы исследовали египетские иероглифы, вы бы нашли некоторый «текст», в котором все изображения обращены влево, и некоторый текст, в котором все изображения обращены вправо. Это связано с тем, что хотя большинство египетских иероглифов читаются СВЕРХУ ВНИЗ, иногда они читались СЛЕВА НАПРАВО или СПРАВА НАЛЕВО. Все изображения обращены в том направлении, в котором их следует читать! Очаровательный!
Все наши иероглифы точка СЛЕВА, , поэтому, если вы хотите забить текст таким образом по горизонтали, вам нужно забить его так, чтобы он читался СЛЕВА НАПРАВО (а по вертикали все еще СВЕРХУ ВНИЗ).
Мои две копейки:
- В моем блоге «Четыре категории шрифтов» сообщение я бы отнес этот шрифт к категории FUN.
- Этот шрифт ЛУЧШЕ выглядит при использовании с лентой, хотя это не обязательно на 100%.
- Этот шрифт работает со ВСЕМИ металлами и удивительно хорошо работает с нержавеющей сталью!
- Обязательно ознакомьтесь с остальной частью нашей линейки дизайнерских марок Древнего Египта и богов/богинь!
Удивительные брелки и подвески:
- Я рекомендую Keychain Supply для всех ваших потребностей в брелоках, подвесках и камнях! Ссылка на их магазин Etsy: KeychainSupply
Для заготовок из нержавеющей стали:
- 0101 StampingBlanks.com и настоятельно рекомендую этот металл в качестве блестящей альтернативы серебру. Имейте в виду, что для использования нержавеющей стали в качестве штамповочных заготовок вам потребуется прочное основание/штамповочный столб и более тяжелый молоток, для чего потребуются различные принадлежности для штамповки. Пожалуйста, посмотрите мое видео о штамповке из нержавеющей стали здесь.
Для алюминиевых заготовок и манжет:
- Любой алюминий на этом сайте, в виде манжет, от Оптимальные сплавы.
Любая алюминиевая заготовка, особенно очень очаровательных форм, взята из Заготовки Birds Eye . Мы настоятельно рекомендуем приобретать «полированные» или «обработанные» заготовки на этих сайтах — благодаря отражению в металле гораздо легче увидеть, где вы штампуете.
- Наши штампы с металлическими шрифтами запрограммированы так, чтобы максимально приблизиться к исходным набранным шрифтам, хотя возможны небольшие различия между набранными и реальными штампами в зависимости от различных потребностей в программировании и штамповке. Пожалуйста, используйте фактические штампованные изображения, представленные на нашем сайте и в каждом списке, чтобы увидеть штампованную версию.
- Чем крупнее и детальнее рисунок, тем труднее его штамповать.
- Несмотря на то, что наши большие 12-миллиметровые модели (также называемые хвостовиками с толстым дном или FBS) РАСЧЕТНЫ для стали, некоторые очень подробные изображения FBS СУПЕР большие, и некоторым штамповщикам из нержавеющей стали с легкими молотками эти большие детализированные штампы могут оказаться очень трудными для обработки.
забейте нержавеющую сталь и получите полное впечатление.
- Каждое изображение на этом сайте, выкованное из нержавеющей стали, было забито 2-фунтовым молотком на штамповочном столбе без буфера между наковальней и столбом. Ни мешка с песком, ни подушечки, только наковальня на твердом штамповочном столбе, идущая прямо к полу. Здесь нет прессы. Все еще тяжело?
- Попробуйте эти два видеоролика:
- Нержавеющая сталь? Я бы ударил… снова
- Мой штамп неисправен?
- Наш раздел Блог содержит все, что вам нужно знать.
- Но вот еще раз, чтобы сэкономить вам еще несколько кликов 🙂
- Все марки Font Fixation производятся для использования на всех металлах. Фотографии продукта и листинга на этом веб-сайте в основном сделаны из нержавеющей стали 22 г с сайта www.stampingblanks.com
- Некоторые металлы тверже других, например, ножи для масла или стейков, и мы не рекомендуем использовать их на стали с таким уровнем твердости.
- Гарантия на наши марки составляет 1 год с даты покупки и распространяется на первоначального покупателя. Марки, приобретенные в группах «десташ» или «бывшие в употреблении», не покрываются гарантией .
- Штампы с простой ямочкой изготавливаются на хвостовике 1/4 дюйма и подходят для большинства зажимных приспособлений для колец. Дизайн с простой ямочкой обычно подходит для манжет шириной 1/4 дюйма, потому что все штампы с простой ямочкой имеют диаметр 0,5 мм. Манжеты 5,5 мм и 1/4 дюйма имеют ширину 6 мм.
- Штампы Hefty Hitter производятся на хвостовиках 3/8 дюйма. Хотя штампы с дизайном этих размеров рассчитаны на использование из нержавеющей стали, некоторые из этих дизайнов довольно детализированы и могут потребовать метода «наклон и постукивание», чтобы получить полное, прочное впечатление. Мы всегда рекомендуем использовать твердую поверхность, передающую усилие непосредственно на пол (например, штамповочный столб), использовать стальной молоток весом 2 фунта и не иметь под наковальней мешка с песком или подобного средства для гашения силы.
Для получения дополнительной информации о том, как получить более качественные показы, см. наше видео на YouTube «Моя печать неисправна».
- Лучшие оттиски для более крупных и детализированных штампов всегда получаются из более мягких металлов, таких как алюминий, латунь, медь, олово и самородное золото. Если вы опытный и опытный штамповщик из нержавеющей стали, у вас не должно возникнуть никаких проблем с нашими более крупными / более подробными штампами из нержавеющей стали. Если вы новичок в штамповке, мы рекомендуем вам начать с более мягких металлов, таких как перечисленные выше, и по мере повышения вашего уровня навыков вам будет легче перейти на нержавеющую сталь.
- Хотите увидеть больше примеров или получить советы по штамповке? Попросите присоединиться к нашей группе Facebook «Fabulous Friends Font Fixation» по адресу www.facebook.com/groups/FontFixation — Ответьте на три вопроса, и мы примем вас в группу!
- Если у вас есть ошибка или дефект в штампе, отправьте электронное письмо по адресу FontFixation@gmail.