Скрипт для Photoshop - изменение размера с учетом ориентации

Всего 82 сообщ. | Показаны 61 - 80
Re[Аццкая_белка]:
Кароче разобрался (даж не думал что туда дойду ) :cannabis:

написал скрипт.

app.preferences.rulerUnits = Units.PIXELS;
var targetlength = 2410; //требуемая минимальная длина или высота
var dpi = 600// разрешение пикселей/дюйм
var k2 = (app.activeDocument.height) / (app.activeDocument.width) * targetlength;
var k1 = (app.activeDocument.width) /(app.activeDocument.height) * targetlength;
if (app.activeDocument.width>app.activeDocument.height) {
app.activeDocument.resizeImage(k1, targetlength, dpi,);}
else {app.activeDocument.resizeImage(targetlength, k2, dpi,);};

теперь уменьшает как мне надо :))

но теперь другая проблема, проблема с кропом.
мне необходимо обрезать длинную сторону до нужного размера, со всех сторон одинаково.
а он отрезает только справа,
Re[Аццкая_белка]:
oops
Re[Аццкая_белка]:
от:Аццкая_белка
Кароче разобрался (даж не думал что туда дойду ) :cannabis:

написал скрипт.

app.preferences.rulerUnits = Units.PIXELS;
var targetlength = 2410; //требуемая минимальная длина или высота
var dpi = 600// разрешение пикселей/дюйм
var k2 = (app.activeDocument.height) / (app.activeDocument.width) * targetlength;
var k1 = (app.activeDocument.width) /(app.activeDocument.height) * targetlength;
if (app.activeDocument.width>app.activeDocument.height) {
app.activeDocument.resizeImage(k1, targetlength, dpi,);}
else {app.activeDocument.resizeImage(targetlength, k2, dpi,);};

теперь уменьшает как мне надо :))

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

Там применяется оператор resizeCanvas
Поищите в Photoshop CS5 JavaScript Ref.
Я верю, Вы справитесь :)
Re[Alf-Romeo]:
я не справлюсь, у меня мозг закипает уже.

этот кроп отрезает справа ( в экшене), а когда просто ручками, то посередине, не могу понять как так ?
и еще как его ориентировать с привязкой к короткой стороне? а то вертикальные кадры он режет горизонтально.
Re[Аццкая_белка]:
от:Аццкая_белка
я не справлюсь, у меня мозг закипает уже.

этот кроп отрезает справа ( в экшене), а когда просто ручками, то посередине, не могу понять как так ?
и еще как его ориентировать с привязкой к короткой стороне? а то вертикальные кадры он режет горизонтально.
Подробнее

формат оператора:
resizeCanvas
([width]
[, height]
[, anchor])

у него есть третий параметр - anchor - якорь:
выберите который нужен из списка:
BOTTOMCENTER
BOTTOMLEFT
BOTTOMRIGHT
MIDDLECENTER
MIDDLELEFT
MIDDLERIGHT
TOPCENTER
TOPLEFT
TOPRIGHT
Re[Alf-Romeo]:
TOPCENTER

да я вообще в этом ничего не понимаю )))

тот что я написал, это я из твоих собирал !
Re[Аццкая_белка]:
Вот что я нашел теперь надо выковырять то что нужно


NAME: Crop And Resize



============================================================================ */
var iniPath = new Folder("~" + "/" + "CropResizeScript");
var myTempFolder = iniPath;

var iniImageColorsValue = new Array(ChangeMode.CMYK, ChangeMode.GRAYSCALE, ChangeMode.LAB, ChangeMode.RGB);
var iniImageColorsProfile = new Array("Working CMYK", "Working Gray", "Lab Color", "Working RGB");
var iniTIFFCompressions = new Array(TIFFEncoding.JPEG, TIFFEncoding.NONE, TIFFEncoding.TIFFLZW, TIFFEncoding.TIFFZIP);
var iniIntents = new Array(Intent.ABSOLUTECOLORIMETRIC, Intent.PERCEPTUAL, Intent.RELATIVECOLORIMETRIC, Intent.SATURATION);
var iniDithers = new Array(Dither.DIFFUSION, Dither.NOISE, Dither.NONE, Dither.PATTERN);

function imageOption () {
this.filePath = "";
this.folder = "";
this.name = "";
this.type = "";
this.resolution = "";
this.effective = "";
this.mode = "";
this.angle = "";
this.bounds = "";
this.parentAngle = "";
this.mask = "";
this.parentBounds = "";
this.savePath = "";
this.flatten = "";
this.autoLevels = "";
this.autoContrast = "";
this.sharpAmount = "";
this.sharpRadius = "";
this.sharpThreshold = "";
this.onlyBlack = "";
this.qualityJPG = "";
this.compressTIF = "";
this.intent = "";
this.useBPC = "";
this.useDither = "";
this.dither = "";
}


function loadOptions (myFile) {
myFile.encoding = 'UTF-8';
var myResult = myFile.open("r");
if (!myResult) {
return null;
}
var myArray = new Array();
var myCounter = 0
while (!myFile.eof) {
myArray[myCounter] = myFile.readln().split(" = ");
myCounter++;
}
myFile.close();
for (myCounter = 0; myCounter < myArray.length; myCounter++) {
this[String(myArray[myCounter][0])] = String(myArray[myCounter][1]);
}
return true;
}
imageOption.prototype.loadOptions = loadOptions;

function setType () {
this.filePath = String(this.filePath);
this.folder = String(this.folder);
this.name = String(this.name);
this.type = Number(this.type);

var myArray = this.resolution.split(",");
this.resolution = Number(myArray[0]);

var myArray = this.effective.split(",");
this.effective = Number(myArray[0]);
var myArray = this.actual.split(",");
this.actual = Number(myArray[0]);
this.mode = Number(this.mode);
this.angle = Number(this.angle);

var myArray = this.bounds.split(",");
this.bounds = Array(Number(myArray[0]), Number(myArray[1]), Number(myArray[2]), Number(myArray[3]));;
this.parentAngle = Number(this.parentAngle);
this.mask = String(this.mask);
this.parentBounds = String(this.parentBounds);

this.savePath = (this.savePath == "true" ? true : false);
this.flatten = (this.flatten == "true" ? true : false);
this.autoLevels = (this.autoLevels == "true" ? true : false);
this.autoContrast = (this.autoContrast == "true" ? true : false);

this.qualityJPG = Number(this.qualityJPG);
this.compressTIF = Number(this.compressTIF);

this.sharpAmount = Number(this.sharpAmount);
this.sharpRadius = Number(this.sharpRadius);
this.sharpThreshold = Number(this.sharpThreshold);
this.onlyBlack = (this.onlyBlack == "true" ? true : false);

this.intent = Number(this.intent);
this.dither = Number(this.dither);
this.useBPC = (this.useBPC == "true" ? true : false);
this.useDither = (this.useDither == "true" ? true : false);

this.horizontalScale = Number(this.horizontalScale);
this.verticalScale = Number(this.verticalScale);
}
imageOption.prototype.setType = setType;

function getExtension(myFile) {
var myString = myFile.name;
var myFind = myString.lastIndexOf(".");
}

function getPath(myString, myObjectCoords) {
var mySubPath = new Array();
var myPoints = new Array();
myObjectCoords[0] = Number(myObjectCoords[0]);
myObjectCoords[1] = Number(myObjectCoords[1]);
var myPathPointString = myString.split("#");
for (myCounter = 0; myCounter < myPathPointString.length; myCounter++) {
var myPData = myPathPointString[myCounter].split("|");
var myPDataAnchor = myPData[0].split("%");
var myPDataRightDirection = myPData[1].split("%");
var myPDataLeftDirection = myPData[2].split("%");

myPoints[myCounter] = new PathPointInfo;
myPoints[myCounter].anchor = new Array(Number(myPDataAnchor[0]) - myObjectCoords[1], Number(myPDataAnchor[1]) - myObjectCoords[0]);
myPoints[myCounter].leftDirection = new Array(Number(myPDataLeftDirection[0]) - myObjectCoords[1], Number(myPDataLeftDirection[1]) - myObjectCoords[0]);
myPoints[myCounter].rightDirection = new Array(Number(myPDataRightDirection[0]) - myObjectCoords[1], Number(myPDataRightDirection[1]) - myObjectCoords[0]);
switch (myPData[3]) {
case "1818848869":
myPoints[myCounter].kind = PointKind.CORNERPOINT;
break;
case "1936553064":
myPoints[myCounter].kind = PointKind.SMOOTHPOINT;
break;
case "1668443762":
myPoints[myCounter].kind = PointKind.CORNERPOINT;
break;
}
}
mySubPath[0] = new SubPathInfo();
mySubPath[0].operation = ShapeOperation.SHAPEXOR;
mySubPath[0].closed = true;
mySubPath[0].entireSubPath = myPoints;
return mySubPath;
}

function getExifRotation(myDoc) {
var myExifRotation = 0;
var myExifData = myDoc.info.exif;
for (myCounter = 0; myCounter < myExifData.length; myCounter++) {
if (myExifData[myCounter][0] == "Orientation") {
myExifRotation = String(myExifData[myCounter][1]).replace("Rotate ", "");
myExifRotation = Number(myExifRotation);
break;
}
}
if (isNaN(myExifRotation)) {
return 0;
} else {
return -myExifRotation;
}

}

with (app) {

//Change path here!!!
var myIniFile = new File (iniPath + "/CR.ini");
if (!myIniFile.exists) {
alert("Can\'t find ini file!");
exit ();
} else {
eval ("//@include \'" + iniPath + "/" + "CR.ini" + "\';");
}
var myLangFile = new File (iniPath + "/" + iniLangFile);
if (!myLangFile.exists) {
alert("Can\'t find lang file!");
exit ();
} else {
eval ("//@include \'" + iniPath + "/" + iniLangFile + "\';");
}

var startRulerUnits = app.preferences.rulerUnits;
var startTypeUnits = app.preferences.typeUnits;
var startDisplayDialogs = app.displayDialogs;
app.preferences.rulerUnits = Units.POINTS;
app.preferences.typeUnits = TypeUnits.POINTS;
app.displayDialogs = DialogModes.NO;

var myFolder = myTempFolder;
var myFiles = myFolder.getFiles("*." + iniSharedFileExt)
for (FileCounter = 0; FileCounter < myFiles.length; FileCounter++) {
var myData = new imageOption();
var myResult = myData.loadOptions(myFiles[FileCounter]);
if (!myResult) {
alert(langNotOpenRead);
exit();
}
myData.setType();
var myDoc = open(File(myData.filePath));
myDoc.rotateCanvas(getExifRotation(myDoc));
if (myData.horizontalScale < 0) {
myFlipH = true;
myData.horizontalScale = -myData.horizontalScale;
} else {
myFlipH = false;
}
if (myData.verticalScale < 0) {
var myFlipV = true
myData.verticalScale = -myData.verticalScale;
} else {
myFlipV = false;
}
if (myData.actual != myDoc.resolution) {
myDoc.resizeImage(undefined, undefined, myData.actual, ResampleMethod.NONE);
}

myDoc.resizeImage(UnitValue(myData.horizontalScale, "%"), UnitValue(myData.verticalScale, "%"), myData.effective)
myDoc.resizeImage(undefined, undefined, myData.resolution, ResampleMethod.BICUBIC);
try {
var myPrevMask = myDoc.pathItems.getByName(iniMaskName);
myPrevMask.remove();
} catch (err) {

}
try {
myPrevBounds = myDoc.pathItems.getByName(iniBoundsName);
myPrevBounds.remove();
} catch (err) {

}
var myPath = myDoc.pathItems.add(iniMaskName, getPath(myData.mask, myData.bounds));
var myBounds = myDoc.pathItems.add(iniBoundsName, getPath(myData.parentBounds, myData.bounds));
var myCropTop = myBounds.subPathItems[0].pathPoints[0].anchor;
var myCropBottom = myBounds.subPathItems[0].pathPoints[2].anchor;
var myCrop = new Array(myCropTop[0], myCropTop[1], myCropBottom[0], myCropBottom[1]);
myDoc.crop(myCrop);
if (!myData.savePath) {
myPath.remove();
}
if (myFlipH) {
myDoc.flipCanvas(Direction.VERTICAL);
}
if (myFlipV) {
myDoc.flipCanvas(Direction.HORIZONTAL);
}
myBounds.remove();
if (myData.mode != -1) {
if (myData.intent = -1) {
myDoc.changeMode(iniImageColorsValue[myData.mode])
} else {
try {
myDoc.convertProfile(iniImageColorsProfile[myData.mode], iniIntents[myData.intent], myData.useBPC, myData.useDither, iniDithers[myData.dither]);
} catch (error) {

}
}
}
if (myData.flatten) {
try {
myDoc.flatten();
} catch (err) {

}
}
for (myCount = 0; myCount < myDoc.artLayers.length; myCount++) {
var myLayer = myDoc.artLayers[myCount];
if (myData.autoContrast) {
try {
myLayer.autoContrast();
} catch (error) {

}
}
if (myData.autoLevels) {
try {
myLayer.autoLevels();
} catch (error) {

}
}
if ((myData.sharpAmount != -1) && (myData.sharpRadius != -1) && (myData.sharpThreshold != -1)) {
if (myData.onlyBlack) {
switch (myDoc.mode) {
case DocumentMode.CMYK:
myDoc.activeChannels = new Array (myDoc.channels.getByName("Black"));
try {
myLayer.applyUnSharpMask(myData.sharpAmount, myData.sharpRadius, myData.sharpThreshold);
} catch (error) {

}
break;
case DocumentMode.GRAYSCALE:
myDoc.activeChannels = new Array (myDoc.channels.getByName("Gray"));
try {
myLayer.applyUnSharpMask(myData.sharpAmount, myData.sharpRadius, myData.sharpThreshold);
} catch (error) {

}
break;
}
} else {
try {
myLayer.applyUnSharpMask(myData.sharpAmount, myData.sharpRadius, myData.sharpThreshold);
} catch (error) {

}
}
}
}
switch (myData.type) {
case 0:
var mySaveOption = new PhotoshopSaveOptions;
var myNewFileName = new File (myData.folder + "/"+ File.decode(myData.name) + iniFileTypes[myData.type].replace("*", ""));
break;
case 1:
var mySaveOption = new TiffSaveOptions;
mySaveOption.imageCompression = iniTIFFCompressions[myData.compressTIF];
if (myData.compressTIF == 0) {
mySaveOption.jpegQuality = myData.qualityJPG;
}
var myNewFileName = new File (myData.folder + "/"+ File.decode(myData.name) + iniFileTypes[myData.type].replace("*", ""));
break;
case 2:
var mySaveOption = new JPEGSaveOptions;
mySaveOption.quality = myData.qualityJPG;
var myNewFileName = new File (myData.folder + "/"+ File.decode(myData.name) + iniFileTypes[myData.type].replace("*", ""));
break;
}
myDoc.saveAs(myNewFileName, mySaveOption, true, Extension.LOWERCASE);
myDoc.close(SaveOptions.DONOTSAVECHANGES);
}


app.preferences.rulerUnits = startRulerUnits;
app.preferences.typeUnits = startTypeUnits;
app.displayDialogs = startDisplayDialogs;
alert(langAllDone + "\n" + langRunInDesign);
}
Re[Аццкая_белка]:
от: Аццкая_белка
TOPCENTER

да я вообще в этом ничего не понимаю )))

тот что я написал, это я из твоих собирал !

что-то типа такого (только я правило обрезки не совсем понял):

var targetlength =800; // большая сторона
var targetwidth = 600; //малая сторона

if (app.activeDocument.width>app.activeDocument.height) {
app.activeDocument.resizeCanvas(targetlength, targetwidth, AnchorPosition.MIDDLECENTER);}

else {app.activeDocument.resizeCanvas(targetwidth, targetlength, AnchorPosition.MIDDLECENTER);};
Re[Alf-Romeo]:
Спасибо огромное
теперь у меня есть скрипт, который обрезает и уменьшает фотку до нужных размеров !
теперь можно кучу фоток сразу печатать !
УРА !!!
Re[Аццкая_белка]:
Если кому надо !

app.preferences.rulerUnits = Units.PIXELS;
var targetlength = 2410; //требуемая минимальная длина или высота
var dpi = 600// разрешение пикселей/дюйм
var k2 = (app.activeDocument.height) / (app.activeDocument.width) * targetlength;
var k1 = (app.activeDocument.width) /(app.activeDocument.height) * targetlength;
if (app.activeDocument.width>app.activeDocument.height) {
app.activeDocument.resizeImage(k1, targetlength, dpi,);}
else {app.activeDocument.resizeImage(targetlength, k2, dpi,);};
var targetlength =3590; // большая сторона
var targetwidth = 2410; //малая сторона
if (app.activeDocument.width>app.activeDocument.height) {
app.activeDocument.resizeCanvas(targetlength, targetwidth, AnchorPosition.MIDDLECENTER);}
else {app.activeDocument.resizeCanvas(targetwidth, targetlength, AnchorPosition.MIDDLECENTER);};
Re[Аццкая_белка]:
от:Аццкая_белка
Спасибо огромное
теперь у меня есть скрипт, который обрезает и уменьшает фотку до нужных размеров !
теперь можно кучу фоток сразу печатать !
УРА !!!
Подробнее

:)
Re[Игорь Гурьянов]:
очень полезная тема, спасибо!

у меня вопрос, возможно ли теоретически сделать подобное: фотошоп обнаруживает появление нового фото в определенном каталоге, открывает его, вставляет определенный логотип, отправляет фото на печать?
Re[photoaz]:
от:photoaz
очень полезная тема, спасибо!

у меня вопрос, возможно ли теоретически сделать подобное: фотошоп обнаруживает появление нового фото в определенном каталоге, открывает его, вставляет определенный логотип, отправляет фото на печать?
Подробнее


фотошоп сам не обнаружит
для логотипов есть скрипты и бесплатная панель от Рассела Брауна, условные экшены в СС
можете задать в Image Processor работу над папкой, это в скриптах



Re[Stendup]:
от: Stendup
фотошоп сам не обнаружит
для логотипов есть скрипты и бесплатная панель от Рассела Брауна, условные экшены в СС
можете задать в Image Processor работу над папкой, это в скриптах

а так: внешний скрипт обнаруживает новое фото, передает в фотошоп, тот обрабатывает фото, печатает?
экшеном вставить логотип - не проблема.

возможно неправильно формулирую вопрос, поясню свою задачу.
проводится праздник для первоклассников, одно из бесплатных развлечений - детишек фоткает фотограф, фотоаппарат по юсб подключен к ноуту, фотки автоматом сливаются в нужный каталог. и тут два варианта: можно посадить человека за фотошоп, который будет из каталога перетаскивать фотку в фотошоп и запускать экшн, а можно это дело как-то автоматизировать..
Re[photoaz]:
посмотрю вечером, на вскидку не помню
Re[photoaz]:
Adobe Bridge
File -> Get Photos From Camera...

Дальше в Бридже:
- Ctrl+A
- Tools -> Photoshop -> Batch

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

ну или может софт есть какой-то специализированный о котором я не знаю...
скорее всего, вам придется дождаться окочания процесса съемки, и запускать экшн после захвата всех фото на диск ...
Re[ДиMUSTый]:
По-моему фотошоп для задач автоматического кропа и резайза это как из пушки по воробьям.
Есть же imagemagick для автоматизации.
Есть же inotify-tools или аналог (если windows) для слежения за файлами и т.п.
Есть же демоны для периодических работ.
Re:
кстати по теме
Скрипт для Photoshop - изменение размера с учетом ориентации

теперь это можно делать экшенами с декабря прошлого года (с облачного обновления CS6)
в шаги экшенов добавили титул If (если)
фотошоп на автомате выбирает портретный или ландшафтный режим, и применяет команду исходя из ориентации изображения.

подробно расписывать не буду, информация есть в сети, просто из-за нехватки времени. занят таблицами цифровых соответствий.

поиском в гугле "conditional actions"
Re[Игорь Гурьянов]: вопрос, может, для кого и очевидный, но всё же..
ребят, а возможно написать скрипт, который меняет масштаб просмотра изображения на 30%, к примеру?

в языках программирования пока малёх недотягываю до гордого звания "новичёк".. но этим делом очень интересуюсь..
поэтому буду очень благодарен, если оставите пару зацепок..
Re[WAZE89]:
от: WAZE89
ребят, а возможно написать скрипт, который меняет масштаб просмотра изображения на 30%, к примеру?...

если не секрет ... а это зачем?
Вы не авторизованы

Пожалуйста, авторизуйтесь, чтоб иметь доступ к полному функционалу сайта