Все статьи
24 сентября 2026 г.8 мин чтения

В шаблоне ячейки разного размера: как извлекать буквы без сдвигов

В шаблоне ячейки разного размера: как извлекать буквы без сдвигов

Если в шаблоне строки имеют разную высоту, а отдельные клетки объединены, единая равномерная сетка неизбежно начнёт захватывать соседние знаки или пропускать часть поля. Надёжнее сначала разделить лист на зоны с собственной геометрией, затем задать границы каждой ячейки в координатах выровненного изображения и проверить результат на нескольких характерных клетках.

Почему равномерная сетка даёт неверный результат

Автоматическая нарезка часто начинается с удобного предположения: вся таблица состоит из одинаковых прямоугольников. Для простого листа это работает. Но в рабочем шаблоне верхняя строка может быть отведена прописным буквам, нижняя — цифрам и знакам, а пояснения или варианты начертаний занимают широкую объединённую область. Даже если общая рамка выглядит ровной, внутренние деления могут быть неодинаковыми.

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

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

Сначала опишите структуру листа

До обработки сделайте карту зон. Зона — это участок, внутри которого принцип разметки одинаков: например, таблица строчных букв с регулярными колонками или отдельная полоса широких полей для вариантов. Не объединяйте в одну зону участки только потому, что они визуально стоят рядом.

Для каждой зоны зафиксируйте:

  • внешнюю рамку в координатах выровненного листа;
  • число рядов и столбцов, если они действительно регулярны;
  • реальные границы отдельных ячеек, включая объединённые поля;
  • порядок знаков и назначение пустых или служебных мест;
  • запас внутри каждой клетки, куда не должны попадать линии таблицы.

Сверьте карту с чистым шаблоном или исходным PDF, если он сохранился. Скан заполненного листа иногда скрывает тонкие разделители под штрихами, пометками и ластиком. Чистая версия подскажет, является ли широкое поле одной ячейкой или несколькими соседними, а заполненный лист покажет фактическое расположение символа.

Разбейте шаблон на зоны с одинаковыми правилами

Начните с крупных прямоугольных областей и отметьте их границы. Например, основной алфавит может занимать верхние ряды, цифры — отдельную короткую полосу, а знаки препинания — группу узких и широких полей. Каждой зоне назначьте постоянный идентификатор, например `upper`, `lower`, `digits`, `punctuation`; он пригодится в карте соответствий и именах временных файлов.

Не пытайтесь описать нерегулярную страницу числом «столбцов на всю ширину». Вместо этого задайте список реальных ячеек: у одной клетки есть координаты левого, верхнего, правого и нижнего края, у другой — свои. Если внутри зоны первые строки регулярны, а в конце есть объединённое поле, регулярную часть можно описать шагом сетки, а исключение — отдельным прямоугольником.

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

Задайте границы в единой системе координат

Сначала выровняйте страницу и выберите итоговый растр, в котором будете нарезать зоны. Затем измеряйте все прямоугольники уже на нём. Не смешивайте координаты исходной фотографии, предварительно обрезанного файла и исправленного изображения: после каждого преобразования размеры и начало координат меняются.

Для прямоугольной клетки удобно хранить левую и верхнюю координаты, ширину и высоту либо четыре границы. Главное — выбрать один формат и пользоваться им везде. Для клетки, выходящей за пределы регулярного ряда, задайте точный отдельный прямоугольник, не выводите её ширину из шага соседних полей.

Если границы ячеек заданы дробными значениями, округляйте их только на этапе получения пиксельного кропа. Раннее округление многих соседних линий способно накопить расхождение. После перевода в пиксели проверяйте, что соседние области не пересекаются случайно и что между ними не образуются полосы, куда исчезают граничные штрихи.

Полезно хранить карту не только как набор координат, но и как таблицу соответствий: зона, адрес ячейки, ожидаемый знак, координаты и статус проверки. Адрес вроде `digits-r02-c04` означает второй ряд и четвёртый столбец внутри зоны цифр; он остаётся понятным, даже если в другой зоне столбцов больше или меньше. Уточните в проекте, с единицы или нуля начинается нумерация, и не меняйте правило в середине работы.

Проверьте геометрию на характерных ячейках

Не запускайте извлечение сразу для всей страницы. Выберите несколько тестовых полей: маленькую клетку, широкую объединённую, клетку у края зоны, верхнюю и нижнюю строки. Они быстро покажут, правильно ли поняты реальные границы и порядок.

Сначала наложите границы на исходный выровненный лист и посмотрите, проходят ли они по разделителям шаблона, а не по штрихам. Затем создайте тестовые вырезки без изменения размера и разместите их рядом с исходной картой. Сверьте три вещи: целиком ли попал знак, не вошла ли соседняя клетка, соответствует ли адрес ожидаемому символу.

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

Объединённые и нестандартные поля

Объединённая ячейка — это один объект, даже если её ширина равна ширине двух или трёх обычных клеток. Не создавайте в ней несколько кропов по воображаемым внутренним колонкам: они разделят один знак или пустое поле без пользы. Запишите её как одну ячейку с собственным адресом и размерами.

Если в широкой клетке стоят два независимых варианта знака, решите по заполненному шаблону, являются ли они одной пробой или двумя отдельными объектами. Во втором случае добавьте две подячейки внутри исходного поля — например, `c04a` и `c04b` — и вручную задайте их границы. Не меняйте исходную карту: связь с исходным листом должна оставаться однозначной.

Нестандартная форма не всегда должна превращаться в прямоугольную область без полей. Если у клетки скошенный край, но сам знак внутри, прямоугольный кроп может содержать фрагмент соседа. В таком случае сохраните прямоугольную вырезку, но предусмотрите внутреннюю маску или ручную проверку содержимого. Автоматическую маску стоит вводить только после того, как понятно, какие линии относятся к границе клетки, а какие — к букве.

Как исправить типичные сбои

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

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

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

Чек-лист перед пакетным извлечением

  • Разделите лист на зоны с одинаковым принципом разметки.
  • Сверьте границы и объединённые поля с чистым оригиналом шаблона.
  • Выберите один выровненный растр и одну систему координат.
  • Задайте отдельные размеры для нестандартных ячеек.
  • Зафиксируйте порядок, адреса и ожидаемые знаки в карте соответствий.
  • Проверьте крайние, маленькие, широкие и нижние клетки тестовыми кропами.
  • Сравните вырезки с исходным листом и исправьте только проблемную зону.
  • Сохраните версию карты вместе с результатом пакетного извлечения.

Частые ошибки

Делить весь лист на одинаковое число клеток. Этот способ работает только при одинаковой разметке. На смешанном шаблоне объединённые поля и разные высоты строк нарушат адресацию.

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

Исправлять кропы вручную, не меняя карту. Ручное подрезание может спасти один файл, но повторный экспорт вернёт исходную ошибку. Обновляйте координаты в источнике правды.

Удалять пустые поля из нумерации. Пустая клетка может быть намеренным местом в шаблоне. Пропуск без записи сдвигает все последующие адреса.

Менять размер всех кропов ради единообразия. Геометрия исходной ячейки и нормализация знака — разные этапы. Сначала получите правильный фрагмент, а затем отдельно решайте, нужен ли общий размер образцов.

FAQ

Можно ли обработать весь лист одной сеткой, если большинство клеток одинаковы?

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

Как поступить, если на заполненном скане плохо видны разделители?

Сравните его с чистым файлом шаблона или сделайте новую копию шаблона без записей. Не восстанавливайте линии только по предположению на основе соседнего ряда: в макете могут быть объединённые клетки. После определения разметки возвращайтесь к заполненному изображению для проверки расположения штрихов.

Что означает объединённая ячейка в карте извлечения?

Это одно поле с собственными координатами, даже если оно занимает место нескольких стандартных клеток. Присвойте ему один адрес, если внутри находится один знак. Если в нём действительно стоят два независимых знака, создайте две явно размеченные подячейки.

Нужно ли приводить разные по размеру вырезки к одинаковому холсту?

Не на этапе определения геометрии ячеек. Сначала сохраните весь знак внутри корректно выделенного фрагмента, затем отдельно проверьте, требуется ли нормализация размера для следующего рабочего процесса. Одинаковый холст не исправляет неверную границу.

Как обнаружить ошибку в порядке клеток до сборки шрифта?

Сверьте адреса с исходным шаблоном через контактный лист и карту соответствий. Неправильный знак в правильной рамке указывает на проблему порядка или подписи; соседний знак внутри рамки обычно говорит о границе кропа. Это разные причины и исправляются в разных местах карты.

Можно ли размечать каждую клетку вручную?

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

Итог

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