OSX NSFont отличается от точно такого же шрифта в Photoshop

Я установил свой шрифт в Photoshop на Helvetica Neue Regular с размером 22pt — без каких-либо дополнительных настроек.

Теперь мне нужен точно такой же результат в моем приложении OSX, которого довольно сложно достичь.

Я изменяю шрифт моего NSTextField, используя

self.label.font = [NSFont fontWithName:@"HelveticaNeue" size:22];

Я создал сравнение HelveticaNeue (обычный) и HelveticaNeue-Medium, Photoshop и OSX. Кажется, что часть OSX всегда немного жирнее и имеет немного уменьшенный интервал между буквами.

Возможно, можно немного поиграться и настроить шрифт в OSX с помощью NSAttribuedString, пока он не будет соответствовать шрифту Photoshop, но действительно ли это необходимо? Разве шрифт не должен быть точно таким же?

введите здесь описание изображения


person sust86    schedule 04.02.2015    source источник


Ответы (1)


Существует множество способов рендеринга шрифтов. Судя по всему, в Photoshop есть собственный движок рендеринга шрифтов, и он отличается от того, что NSTextField делает по умолчанию.

Если вы увеличите изображение (таким образом, чтобы не пытаться сгладить результат), вы увидите, что рендеринг Photoshop использует сглаживание в оттенках серого, а рендеринг OS X использует сглаживание субпикселей. . Рендеринг OS X имеет цветную окантовку. При отображении в нормальных размерах эти цвета в конечном итоге освещают различные элементы RGB на ЖК-экране. Вместо того, чтобы выглядеть цветным, он просто выглядит как изменение яркости. По сути, субпиксельное сглаживание использует расположение цветовых элементов в пикселях ЖК-дисплея для увеличения разрешения, с которым он может отображаться.

Я также подозреваю, что механизм рендеринга OS X использует субпиксельное позиционирование глифов. Это позволяет размеру и интервалу глифов более точно соответствовать тому, что предписывает шрифт, делая меньшие компромиссы при отображении в сетке пикселей. Например, посмотрите на первую строку (Helvetica Neue 22pt: Photoshop). Расстояние между «H» и «e», а также между «l» и «v» кажется мне неправильным. OS X выглядит лучше, на мой взгляд.

Если вы визуализируете текст самостоятельно, вы можете отключить субпиксельное сглаживание с помощью CGContextSetShouldSubpixelQuantizeFonts() и отключить субпиксельное позиционирование с помощью CGContextSetShouldSubpixelPositionFonts(). (Документация предполагает, что отключение субпиксельного позиционирования также отключает субпиксельное сглаживание, хотя я не уверен, почему это обязательно последует.) Посмотрите, приведет ли это к результатам, более похожим на то, что дает вам Photoshop.

Кстати, вероятно, можно также настроить, как Photoshop отображает шрифт. Тот факт, что две вещи якобы отображают один и тот же шрифт, не означает, что они будут создавать одинаковые пиксели.

person Ken Thomases    schedule 04.02.2015