W
wright
Гость
Топикстартер
Ясень-пень существует множество фильтров для быстрой чистки фоток, однако на практике оказывается все не так шоколадно как описывается. Я имею ввиду практику массового производства за кратчайшее время. У меня были в ходу всякие фильтры и плагины, в конце концов ничего не прижилось и я пользовался простым Surface Blur (10-20) в режиме ослабления с последующим повышением резкотухи по обстоятельствам.
Радиус 10 пикселов означает что фактура практически будет уничтожена. Но уловка в ослаблении. Отменяется действие фильтра и применяется с этим самым ослаблением в процентах по характеру изображения.
Постоянно этим заниматься было утомительно и я написал простейший скрипт. Который и выкладываю. Скрипт выкатывает диалог в котором вы можете задать величину ослабления в процентах. По умолчанию там 50. Если фотка получше качеством - можно поставить 30. Если совсем пропащая и растянутая - 70. Обычно хорошо идет 50.
Естественно улучшается чисто визуальное восприятие. Что, собственно, делают и все такого рода фильтры, которые, совершенно ясно действуют точно по такому же сценарию, но имеют более развернутый интерфейс, жрут гораздо больше и даже иногда захлебываются.
Скрипт можно применять к слоям со слоевой маской. Он отцепляет ее временно чтобы применить ослабление, затем вновь прицепляет.
Применяется к "убитым" фоткам. То есть таким, которые безбожно растянуты, или имеют сильные артефакты сжатия. Работает настолько быстро, насколько данный простой фильтр будет работать в вашей системе. А4 обрабатывается примерно за 5 секунд.
Радиус 10 пикселов означает что фактура практически будет уничтожена. Но уловка в ослаблении. Отменяется действие фильтра и применяется с этим самым ослаблением в процентах по характеру изображения.
Постоянно этим заниматься было утомительно и я написал простейший скрипт. Который и выкладываю. Скрипт выкатывает диалог в котором вы можете задать величину ослабления в процентах. По умолчанию там 50. Если фотка получше качеством - можно поставить 30. Если совсем пропащая и растянутая - 70. Обычно хорошо идет 50.
Естественно улучшается чисто визуальное восприятие. Что, собственно, делают и все такого рода фильтры, которые, совершенно ясно действуют точно по такому же сценарию, но имеют более развернутый интерфейс, жрут гораздо больше и даже иногда захлебываются.
Скрипт можно применять к слоям со слоевой маской. Он отцепляет ее временно чтобы применить ослабление, затем вновь прицепляет.
Применяется к "убитым" фоткам. То есть таким, которые безбожно растянуты, или имеют сильные артефакты сжатия. Работает настолько быстро, насколько данный простой фильтр будет работать в вашей системе. А4 обрабатывается примерно за 5 секунд.
PHP:
if (documents.length != 0) {
linkUnlinkLayerMask(false); // unlink mask
var fadeValue = prompt("Input Fade value.", "50", "Fade Surface Blur");
if ((fadeValue != null) && (fadeValue != "")) {
try {
// =======================================================
var id3 = sTID( "surfaceBlur" );
var desc2 = new ActionDescriptor();
var id4 = cTID( "Rds " );
var id5 = cTID( "#Pxl" );
desc2.putUnitDouble( id4, id5, 10.000000 );
var id6 = cTID( "Thsh" );
desc2.putInteger( id6, 20 );
executeAction( id3, desc2, DialogModes.NO );
// Undo apply
executeAction(cTID('undo'), undefined, DialogModes.NO);
// =======================================================
var id7 = cTID( "Fade" );
var desc3 = new ActionDescriptor();
var id8 = cTID( "Opct" );
var id9 = cTID( "#Prc" );
desc3.putUnitDouble( id8, id9, fadeValue );
var id10 = cTID( "Md " );
var id11 = cTID( "BlnM" );
var id12 = cTID( "Nrml" ); // there you can change blend mode; try ScrpitListemer for keys
desc3.putEnumerated( id10, id11, id12 );
executeAction( id7, desc3, DialogModes.NO );
linkUnlinkLayerMask(true); // link back
} catch (e) {
alert(e);
}
}
}
function hasLayerMask() {
var ref = new ActionReference();
ref.putEnumerated(cTID("Lyr "), cTID("Ordn"), cTID("Trgt"));
var desc = executeActionGet(ref);
return desc.hasKey(cTID("UsrM"));
}
function linkUnlinkLayerMask(u){
if(hasLayerMask()){
var desc = new ActionDescriptor();
var desc2 = new ActionDescriptor();
var ref = new ActionReference();
ref.putEnumerated( cTID( "Lyr " ), cTID( "Ordn" ), cTID( "Trgt" ) );
desc.putReference( cTID( "null" ), ref );
desc2.putBoolean( cTID( "Usrs" ), u );
desc.putObject( cTID( "T " ), cTID( "Lyr " ), desc2 );
executeAction( cTID( "setd" ), desc, DialogModes.NO );
}
}
function cTID(s) {return app.charIDToTypeID(s);}
function sTID(s) {return app.stringIDToTypeID(s);}