Диалоговое окно

  • Автор темы Автор темы chesen
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Ответ: Диалоговое окно

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

То есть к прямоугольной картинке будет применена повернутая селекция в виде слоевой маски. Видимо это и подразумевалось в словах "трансформ экшном" - то есть поворачивать хотите экшном.

Так вот, можно добавить простейший диалог в которой вы просто впишите угол поворота.
 
Ответ: Диалоговое окно

Спасибо, буду осваивать новые методы замены контента.
 
Ответ: Диалоговое окно

Слегка упростив скрипт, добился того результата, которого хотел.
Код:
// ЗАТАЛКИВАЕТ АКТИВНЫЙ СЛОЙ АКТИВНОГО ДОКУМЕНТА
// В ГРАНИЦЫ СЕЛЕКЦИИ ЦЕЛЕВОГО ДОКУМЕНТА КОТОРЫЙ 
// ДОЛЖЕН БЫТЬ В СПИСКЕ Window ПЕРВЫМ
// ДЛЯ ФШ ВЕРСИИ CS2!!!

#target photoshop
app.bringToFront();

// целевой документ должен быть первым с списке Window
// если он активный то скрипт не выполняется
if (documents[0] != app.activeDocument) {

	// целевой документ
	var doc0 = documents[0];
	
	
		// remember unit settings and change to pixels
		var originalRulerUnits = app.preferences.rulerUnits;
		app.preferences.rulerUnits = Units.PIXELS;

		var bnds = getSelectionBounds(doc0); // габариты 
		var w = bnds[2]-bnds[0]; // ширина
		var h = bnds[3]-bnds[1]; // высота

		// активный документ
		var doc = app.activeDocument;
		doc.changeMode(ChangeMode.RGB);
		// имя файла без расширения
		var docName = doc.name.substring(0, doc.name.lastIndexOf("."));

		var l = doc.activeLayer.duplicate(doc0,ElementPlacement.PLACEATBEGINNING);
		doc.close(SaveOptions.DONOTSAVECHANGES);
		app.activeDocument = doc0;
		l.name = docName;

		var lbnd = l.bounds;
		for (var i = 0; i < lbnd.length; i++) { 
		  lbnd[i] = lbnd[i].value; 
		} 

		var lw = lbnd[2]-lbnd[0]; // ширина слоя
		var lh = lbnd[3]-lbnd[1]; // высота слоя

		var kw = (w/lw)*100;
		var kh = (h/lh)*100;

		// коэффициент масштабирования:
		// по короткой стороне выделения: kw > kh
		// по длинной: kw < kh
		if (kw < kh) { var km = kh} else { var km = kw};

		l.resize(km, km, AnchorPosition.TOPLEFT);
		var k = 72/doc0.resolution; // из-за бага translate в ЦС2
		l.translate((bnds[0]-lbnd[0])*k, (bnds[1]-lbnd[1])*k);
		
		

		// добавить слоевую маску по селекции
		addMaskFromSelection();

		// снять связь с маской (unlink)
		linkLayerMask(false);

		// restore original unit setting
		preferences.rulerUnits = originalRulerUnits;
		
	} else {
		alert("Целевой документ не имеет селекции");
	}





function getSelectionBounds(doc) { 
	var doc0 = app.activeDocument;
	app.activeDocument = doc;
    var l = doc.artLayers.add(); 

    doc.selection.fill(app.foregroundColor); 
    var bnds = l.bounds; 
	l.remove();
  
    for (var i = 0; i < bnds.length; i++) { 
      bnds[i] = bnds[i].value; 
    } 
	
	app.activeDocument = doc0;
    return bnds; 
} 

function addMaskFromSelection() {
	var desc = new ActionDescriptor();
	desc.putClass( 1316429856, 1130917484 );
	var ref = new ActionReference();
	ref.putEnumerated( 1130917484, 1130917484, 1299409696 );
	desc.putReference( 1098129440, ref );
	desc.putEnumerated( 1433628263, 1433629261, 1383492691 );
	executeAction( 1298866208, desc, DialogModes.NO );	
}

function linkLayerMask(bool){
	var desc = new ActionDescriptor();
	var ref = new ActionReference();
	ref.putEnumerated( 1283027488, 1332896878, 1416783732 );
	desc.putReference( 1853189228, ref );
	var desc1 = new ActionDescriptor();
	desc1.putBoolean( 1433629299, bool );
	desc.putObject( 1411391520, 1283027488, desc1 );
	executeAction( 1936028772, desc, DialogModes.NO );
	returnToLayer();
}

function returnToLayer() {
	var savedLayerRef = app.activeDocument.activeLayer;
	app.activeDocument.activeLayer = app.activeDocument.artLayers[app.activeDocument.artLayers.length - 1];
	app.activeDocument.activeLayer = savedLayerRef;
}

Теперь маска принимает нужные формы.
Нижайший поклон за помощь! Будете в Минске, полянку организую!
 
Ответ: Диалоговое окно

То есть селекция не мешает трансформации слоя?

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

В таком случае правильно сделали: селекция остается как есть и затем приняется как слоевая маска.
 
Ответ: Диалоговое окно

Кстати, одно из отличий в работе ЦС2 и ЦС3 в том, что открытые файлы обрабатываются автоматом по-разному: в ЦС2-с первого в списке Windows, в ЦС3- с последнего.У меня большинство экшенов заклинено на этом, можно ли как-то поменять предустановки фотошопа, не переделывая экшены?
 
Ответ: Диалоговое окно

По идее это зависит от операционной системы. Файлы передаются списком: "файл.пзд", "файл2.пзд", "файл3.пзд" и так далее. Кавычки нужны для того, чтобы в именах файлов могли быть пробелы. Попробуйте включить сортировку, например по имени, принудительно. Включите режим Details и выберите Name, или что там.
 
Ответ: Диалоговое окно

Я имел ввиду обработку файлов, уже открытых в шопе. Тех, которые наличиствуют в списке меню программы.
 
Ответ: Диалоговое окно

Нет, ФШ не может обрабатывать документ который не является активным. То есть экшн всегда будет работать начиная с последнего открытого документа - поскольку именно он оказывается последним в списке и активным.

Экшн обработал, закрыл, активным становится предпоследний и так далее.
 
Статус
Закрыто для дальнейших ответов.