2015-02-04 2 views
0

Я установил свой шрифт в Photoshop как Helvetica Neue Regular с 22pt - без каких-либо дополнительных настроек.OSX NSFont отличается от того же шрифта в Photoshop

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

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

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

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

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

enter image description here

ответ

0

Есть много способов рендеринга шрифтов. По-видимому, Photoshop имеет свой собственный механизм визуализации шрифтов, и он отличается от того, что делает по умолчанию NSTextField.

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

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

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

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