Что такое антиалиасинг
Антиалиасинг — приём, при котором край буквы или линии рисуется не одним чёрным пикселем, а несколькими серыми разной насыщенности. Глаз усредняет их и видит ровную границу вместо лесенки. Плата — цвет: там, где в векторе была чистая чёрная линия, в растре появляется полоса промежуточных оттенков. Для чтения это благо. Для сжатия, распознавания и двухцветных фильтров — помеха, потому что полутона и кодируются дороже, и порог между чёрным и белым размывают.
Коротко о цифрах
- Что рисуется на краю
- пиксели промежуточной насыщенности вместо ступеньки
- Как считается оттенок
- по доле площади пикселя, накрытой фигурой
- Почему один шаг уменьшения хуже
- переход 4000 → 800 отбрасывает четыре пикселя из пяти
- Как уменьшаем мы
- делением стороны пополам, сглаживание качества high
- Формат для схем и скриншотов
- PNG — хранит серые края без своих артефактов
Откуда берутся серые пиксели
Пиксель — это квадрат, а контур буквы через него проходит по диагонали. Закрасить квадрат целиком значит соврать в одну сторону, оставить белым — в другую. Сглаживание закрашивает его настолько, насколько он покрыт фигурой: перекрыт на четверть — светло-серый, на три четверти — почти чёрный.
Чем крупнее кегль и выше разрешение, тем меньше доля таких пограничных пикселей и тем незаметнее сам приём. На восьмом кегле при семидесяти двух точках на дюйм в букве почти не остаётся чистых пикселей — вся она состоит из краёв, и текст выглядит серым, а не чёрным.
Где сглаживание мешает
- Двухцветные фильтры сжатия требуют ровно двух значений; полутона перед упаковкой приходится загонять обратно в чёрное и белое, и тонкие штрихи при этом рвутся.
- Распознавание текста тоже начинается с бинаризации, и размытый край даёт больше ошибок на буквах, различающихся тонкой деталью.
- Кодирование JPEG хуже всего справляется как раз с резкими переходами, а сглаженный край — это цепочка таких переходов.
- Тонкая линия толщиной меньше пикселя не может стать чёрной в принципе: она распределяется между двумя серыми и на бумаге печатается бледной.
Как с этим обращаться на практике
- Не боритесь со сглаживанием — поднимайте разрешение. Триста точек на дюйм оставляют мелкому шрифту достаточно чистых пикселей внутри штриха.
- Схемы, чертежи и скриншоты с текстом сохраняйте в PNG: он хранит серые края точно, а JPEG добавляет к ним собственные разводы.
- При уменьшении картинки не прыгайте сразу к целевому размеру: прямой переход от четырёх тысяч пикселей к восьмистам выбрасывает четыре пикселя из пяти.
- Наше уменьшение идёт ступенями с делением стороны пополам и сглаживанием высокого качества, а последний шаг попадает точно в заданный размер.
Частые вопросы
Можно ли отключить сглаживание при экспорте страницы в картинку?
В браузерном рендере — нет, и это правильно: без него мелкий шрифт рассыпается на ступеньки и становится нечитаемым. Если нужен чистый чёрно-белый результат, поднимите разрешение и бинаризуйте картинку отдельно.
Почему чёрный текст на экспортированной картинке выглядит серым?
Кегль слишком мал для выбранного разрешения: в букве почти не остаётся пикселей, целиком лежащих внутри штриха. Увеличьте разрешение вдвое, и текст почернеет без всяких настроек цвета.
Отчего у скриншота с текстом появляется цветная бахрома?
Это субпиксельное сглаживание: система рисует края, используя красную, зелёную и синюю полоски пикселя по отдельности. На чужом экране с другим порядком полосок такая картинка выглядит грязной.
Что лучше для документа — резкие края или сглаженные?
Для чтения с экрана и печати — сглаженные. Резкие имеют смысл только там, где картинка пойдёт в двухцветное сжатие или в распознавание, и тогда порог лучше задать осознанно, а не получить его случайно.