Photoshop JavaScript UnitValue. Или правильная работа с единицами измерения. (Перевод единиц измерения)

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

Для правильной работы прежде всего необходимо задать коэффициент базовой величины:

UnitValue.baseUnit = UnitValue (1/300, "in"); //-- Для правильной работы .as('...')

Значение 300, я так полагаю это DPI, поэтому будет наверное лучше указать в зависимости от DPI документа, но мне нужно именно 300, так как с таким разрешением я вывожу на принтер. Для экрана соответственно нужно 72. Дальше уже можно работать с конвертацией сантиметров в пиксели, например:

val12 = new UnitValue (12, "cm"); //-- создаем переменную типа UnitValue  в сантиметрах 
alert(val12.as('px')); //-- выводим преобразованную величину.

Ну, или узнать ширину слоя в пикселях:

var _docRef=app.activeDocument;
var layerW=new UnitValue(_docRef.activeLayer.bounds[2] -_docRef.activeLayer.bounds[0], 'px');

При попытке напрямую получить значение, которое хранится в UnitValue будет отдано значение с единицами измерения.

Например:

alert(layerW)

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

alert(layerW.value);
Вот в общем то и всё

Related posts

Photoshop JavaScript сохранить настройки скрипта.

История действий(выполнения) скрипта.

4 комментария

Ветер 22 сентября 2022 - 20:54
Спасибо большое! Все использовал parseInt
Navi1982 5 сентября 2015 - 18:11
Я не сишник, но тоже приходится работать с Photoshop'ом, через скрипты из Corel Draw... Скрипты пишу, естественно на VBA (Visual Basic for Applications). Так вот, нужную единицу измерения документа можно установить перед использованием других методов/процедур/функций. Ну, и этично было бы не плохо в конце процедуры вернуть исходное значение свойства. Пример: OldUnits = psApp.Preferences.RulerUnits psApp.Preferences.RulerUnits = psPixels ' здесь манипуляции с размерами объектов psApp.Preferences.RulerUnits = OldUnits или одно из возможных значений: psPixels = 1 / psInches = 2 / psCM = 3 / psMM = 4 / psPoints = 5 / psPicas = 6 / psPercent = 7 И не заморачиваться с переводами размеров. Разве что, если приходиться переводить царские локти в одну из единиц СИ - тогда ваш метод хорош ;D
Pavelk 6 сентября 2015 - 11:28
Благодарю за дополнение! Действительно, так можно сделать, но всё мерять в пикселях не всегда возможно. Поэтому без UnitValue.baseUnit перевод из пикселей в сантиметры будет давать не верные значений (видимо берётся какой-то иной разрешение)
WladL 27 декабря 2016 - 1:56
Ибо писано в писании : UnitValue.baseUnit = UnitValue object that defines the size of one pixel, or a total size to use as a base for percentage values
Add Comment