JavaScript для Photoshop

Форум для программистов

Сообщение Terrogen » Ср июн 22, 2005 6:48 pm

Товарищи программисты, помогите человеку, незнакомому с элементарными вещами в программировании! Нужен скриптик (JavaScript) для Фотошопа, который делает следующее:

<span style='color:#000099'>В директории, откуда открыт текущий файл создаёт новый фолдер с системной датой и туда сохраняет текущий файл в максимальном джепеге(12). </span>

Вообще, можно и без сохранения обойтись - главное - чтоб фолдер с датой появился. Мне эта байда нужна для action, который будет обрабатывать ежедневно большое кол-во фоток и сохранять их культурно. <!--emo&:)-->[img]style_emoticons/<#EMO_DIR#>/smile.gif[/img]<!--endemo-->


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

<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin--><span style='font-size:8pt;line-height:100%'>// addExifDate1.4.js  version 1.4 (06/2004)

// prints the exif creation date and a comment on the given positon (see settings)
// new in version 1.1: looks now for "Date Time Original" - string
// new in version 1.2: layerproperties changed, textsize depends on imagesize, vOffset
// 1.3 works also in PS CS
// 1.4 variable Fontcolor and Outline

//*************************************************************
// if you find this script useful, please donate a fair amount
// to any relief organisation you like.
//*************************************************************

// Copyright © Michael Exner  (michael.exner@gmx.at)


// *****************************    SETTINGS    ***************************


var textSize = 3    // Textsize (% of shorter Imagesize)

var textFont = "ArialNarrow"    // Font of added text

var comment = " "    // additional text or comment printed in front of date

var hOffset = 98    // hor. offset in % (1 is left, 100 is right)

var vOffset = 95    // vert. offset in % (1 is on top, 100 is on the bottom)

var noTime = 1    // 1...don't print time
      // 0...print time after date

var red = 255;    // Fontcolor R-Value
var green = 255;    // Fontcolor G-Value
var blue = 255;    // Fontcolor B-Value

var outline = 0;    // Outline (0 is black, 255 is white)
     

// *****************************    SETTINGS END  ***************************

var textColor = new SolidColor;
textColor.rgb.red = red;
textColor.rgb.green = green;
textColor.rgb.blue = blue;


if ( documents.length > 0 )
{
var originalRulerUnits = preferences.rulerUnits;
preferences.rulerUnits = Units.PIXELS;
displayDialogs = DialogModes.NO;

try
{
 
  var docRef = activeDocument;
 
  var hoehe = activeDocument.height;
  var breite = activeDocument.width;
 

  var myLayerRef = docRef.artLayers.add();
  myLayerRef.kind = LayerKind.TEXT;
  var i=1;
  while (i<30)
  {

  var exifDate = docRef.info.exif[i].toString();
  if (i==30)
  {
  exifDate = ""
  }
  if (exifDate.substring(0,18)=="Date Time Original")
  {
    i=29
  }
  i++
  }

  var docDate = exifDate.substring(27, 29) + "." + exifDate.substring(24, 26) + "." + exifDate.substring(19, 23)
  var docTime = exifDate.substring(30, 35)
 
  if (noTime == 0)
  {
  docTime = "";
  }
 
  if (hoehe > breite)
  {
  var bezug = breite;
  }
  else
  {
  var bezug = hoehe;
  }

  myLayerRef.name = docDate;
  var myTextRef = myLayerRef.textItem;
  myTextRef.font = textFont;
  myTextRef.color = textColor;
  myTextRef.size = (bezug * textSize / 300);

  myTextRef.justification = Justification.LEFT;

  if ( hOffset > 50 )
  {
  myTextRef.justification = Justification.RIGHT;
  }

  myTextRef.position = new Array( docRef.width*hOffset/100, docRef.height*vOffset/100 );
  myTextRef.contents = comment + docDate + "  " + docTime;

  layerProperties()
 
 
}

catch( e )
{
  preferences.rulerUnits = originalRulerUnits;
  throw e;
}

preferences.rulerUnits = originalRulerUnits;
flatImage();
 
}
else
{
alert( "You must have a document open to add the creation date!" );
}



function flatImage()
{
  var id2901 = charIDToTypeID( "FltI" );
  executeAction( id2901, undefined, DialogModes.NO );
}



function layerProperties()
{
// =======================================================
var id360 = charIDToTypeID( "setd" );
    var desc34 = new ActionDescriptor();
    var id361 = charIDToTypeID( "null" );
        var ref7 = new ActionReference();
        var id362 = charIDToTypeID( "Prpr" );
        var id363 = charIDToTypeID( "Lefx" );
        ref7.putProperty( id362, id363 );
        var id364 = charIDToTypeID( "Lyr " );
        var id365 = charIDToTypeID( "Ordn" );
        var id366 = charIDToTypeID( "Trgt" );
        ref7.putEnumerated( id364, id365, id366 );
    desc34.putReference( id361, ref7 );
    var id367 = charIDToTypeID( "T  " );
        var desc35 = new ActionDescriptor();
        var id368 = charIDToTypeID( "Scl " );
        var id369 = charIDToTypeID( "#Prc" );
        desc35.putUnitDouble( id368, id369, 416.666667 );
        var id370 = charIDToTypeID( "OrGl" );
            var desc36 = new ActionDescriptor();
            var id371 = charIDToTypeID( "enab" );
            desc36.putBoolean( id371, true );
            var id372 = charIDToTypeID( "Md  " );
            var id373 = charIDToTypeID( "BlnM" );
            var id374 = charIDToTypeID( "Nrml" );
            desc36.putEnumerated( id372, id373, id374 );
            var id375 = charIDToTypeID( "Clr " );
                var desc37 = new ActionDescriptor();
                var id376 = charIDToTypeID( "Rd  " );
                desc37.putDouble( id376, outline );
                var id377 = charIDToTypeID( "Grn " );
                desc37.putDouble( id377, outline );
                var id378 = charIDToTypeID( "Bl  " );
                desc37.putDouble( id378, outline );
            var id379 = charIDToTypeID( "RGBC" );
            desc36.putObject( id375, id379, desc37 );
            var id380 = charIDToTypeID( "Opct" );
            var id381 = charIDToTypeID( "#Prc" );
            desc36.putUnitDouble( id380, id381, 100.000000 );
            var id382 = charIDToTypeID( "GlwT" );
            var id383 = charIDToTypeID( "BETE" );
            var id384 = charIDToTypeID( "SfBL" );
            desc36.putEnumerated( id382, id383, id384 );
            var id385 = charIDToTypeID( "Ckmt" );
            var id386 = charIDToTypeID( "#Pxl" );
            desc36.putUnitDouble( id385, id386, 100.000000 );
            var id387 = charIDToTypeID( "blur" );
            var id388 = charIDToTypeID( "#Pxl" );
            desc36.putUnitDouble( id387, id388, 3.000000 );
            var id389 = charIDToTypeID( "Nose" );
            var id390 = charIDToTypeID( "#Prc" );
            desc36.putUnitDouble( id389, id390, 0.000000 );
            var id391 = charIDToTypeID( "ShdN" );
            var id392 = charIDToTypeID( "#Prc" );
            desc36.putUnitDouble( id391, id392, 0.000000 );
            var id393 = charIDToTypeID( "AntA" );
            desc36.putBoolean( id393, false );
            var id394 = charIDToTypeID( "TrnS" );
                var desc38 = new ActionDescriptor();
                var id395 = charIDToTypeID( "Nm  " );
                desc38.putString( id395, "Standard" );
                var id396 = charIDToTypeID( "Crv " );
                    var list8 = new ActionList();
                        var desc39 = new ActionDescriptor();
                        var id397 = charIDToTypeID( "Hrzn" );
                        desc39.putDouble( id397, 0.000000 );
                        var id398 = charIDToTypeID( "Vrtc" );
                        desc39.putDouble( id398, 0.000000 );
                    var id399 = charIDToTypeID( "CrPt" );
                    list8.putObject( id399, desc39 );
                        var desc40 = new ActionDescriptor();
                        var id400 = charIDToTypeID( "Hrzn" );
                        desc40.putDouble( id400, 255.000000 );
                        var id401 = charIDToTypeID( "Vrtc" );
                        desc40.putDouble( id401, 255.000000 );
                    var id402 = charIDToTypeID( "CrPt" );
                    list8.putObject( id402, desc40 );
                desc38.putList( id396, list8 );
            var id403 = charIDToTypeID( "ShpC" );
            desc36.putObject( id394, id403, desc38 );
            var id404 = charIDToTypeID( "Inpr" );
            var id405 = charIDToTypeID( "#Prc" );
            desc36.putUnitDouble( id404, id405, 100.000000 );
        var id406 = charIDToTypeID( "OrGl" );
        desc35.putObject( id370, id406, desc36 );
    var id407 = charIDToTypeID( "Lefx" );
    desc34.putObject( id367, id407, desc35 );
executeAction( id360, desc34, DialogModes.NO );
}</span>
<!--QuoteEnd--></div><!--QuoteEEnd-->
<a href="http://terrogen.livejournal.com/" target="_blank">ЖЖ - Вестник научного похуизма</a>
Terrogen
Маршал
 
Сообщений: 5347
Зарегистрирован: Пт июл 09, 2004 8:17 pm
Откуда: Riga
Пункты репутации: 0

Сообщение dAnIK SeNT » Ср июн 22, 2005 8:20 pm

2Terrogen
Ух, блин... А куда в фотошопе прикручиваются скрипты?
Если скажешь - наверное, напишу, как посвободнее буду.
Тебе, вообще, как срочно надо?
яНЯЕД ОН СОПЪФЙЕ: Athlon 64 X2 5200+ @2,86GHz / nF 570 SLI (ASUS M2N SLI Deluxe) / 4 Gb RAM (4x1Gb Kingston) / 2,9Tb SATAII (0,50+0,64+0,75+1,00Tb WD) / ASUS 8800 GTS512 / 2x NEC-Optiarc AD-7173 / Thermaltake ToughPower 650W / 2x30W Microlab Solo-2 / 20" LCD Benq FP202W (wide) / openSUSE 11.1 / KDE 4.2.1
<!--coloro:Navy--><span style="color:Navy"><!--/coloro-->оН БЯЕЛ БНОПНЯЮЛ - Б email. б ICQ ОНЪБКЪЧЯЭ ПЮГ Б ОНКЦНДЮ.<!--colorc--></span><!--/colorc-->
dAnIK SeNT
Маршал
 
Сообщений: 5101
Зарегистрирован: Чт мар 28, 2002 7:48 pm
Откуда: яяяп
Пункты репутации: 0

Сообщение Terrogen » Ср июн 22, 2005 9:38 pm

2dAnIK SeNT
В C:\Program Files\Adobe\Adobe Photoshop CS2\Presets\Scripts кидаешь скрипт и всё -
в меню file видим следующее:
Изображение

Также, в девятой версии Фотошопа, это запускается ещё и через отдельную тулзу - ExtendScript Toolkit, живущую по адресу C:\Program Files\Adobe\Adobe Utilities\ExtendScript Toolkit\, что даёт возможность выполнять рутинные пакетные штуки в фоновом режиме.

Сегодня часа два мучил гугл, в рунете нашёл буквально пару мест, где люди говорят о скриптах, а на буржуазные форумы я не ходок: <!--emo&:(-->[img]style_emoticons/<#EMO_DIR#>/sad.gif[/img]<!--endemo-->

<a href='http://informika.net.ru/graf/txt/011.php' target='_blank'>http://informika.net.ru/graf/txt/011.php</a>
<a href='http://xeon12.com/forum/?showtopic=100' target='_blank'>http://xeon12.com/forum/?showtopic=100</a>
<a href='http://informika.net.ru/graf/txt/011.php' target='_blank'>http://informika.net.ru/graf/txt/011.php</a>
но, как говорится, читал букварь, много думал... Впрочем, есть ещё и таинственная книга - C:\Program Files\Adobe\Adobe Photoshop CS2\Scripting Guide...

<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->Тебе, вообще, как срочно надо?<!--QuoteEnd--></div><!--QuoteEEnd-->
Не горит - просто озаботился автоматизировать то, что делаю ручками каждый день. <!--emo&:)-->[img]style_emoticons/<#EMO_DIR#>/smile.gif[/img]<!--endemo-->
Последний раз редактировалось Terrogen Ср июн 22, 2005 9:41 pm, всего редактировалось 1 раз.
<a href="http://terrogen.livejournal.com/" target="_blank">ЖЖ - Вестник научного похуизма</a>
Terrogen
Маршал
 
Сообщений: 5347
Зарегистрирован: Пт июл 09, 2004 8:17 pm
Откуда: Riga
Пункты репутации: 0

Сообщение dAnIK SeNT » Чт июн 23, 2005 4:29 pm

Поставлю CS2 - сделаю :)
яНЯЕД ОН СОПЪФЙЕ: Athlon 64 X2 5200+ @2,86GHz / nF 570 SLI (ASUS M2N SLI Deluxe) / 4 Gb RAM (4x1Gb Kingston) / 2,9Tb SATAII (0,50+0,64+0,75+1,00Tb WD) / ASUS 8800 GTS512 / 2x NEC-Optiarc AD-7173 / Thermaltake ToughPower 650W / 2x30W Microlab Solo-2 / 20" LCD Benq FP202W (wide) / openSUSE 11.1 / KDE 4.2.1
<!--coloro:Navy--><span style="color:Navy"><!--/coloro-->оН БЯЕЛ БНОПНЯЮЛ - Б email. б ICQ ОНЪБКЪЧЯЭ ПЮГ Б ОНКЦНДЮ.<!--colorc--></span><!--/colorc-->
dAnIK SeNT
Маршал
 
Сообщений: 5101
Зарегистрирован: Чт мар 28, 2002 7:48 pm
Откуда: яяяп
Пункты репутации: 0

Сообщение Terrogen » Чт сен 01, 2005 6:29 am

2dAnIK SeNT
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->Поставлю CS2 - сделаю :)<!--QuoteEnd--></div><!--QuoteEEnd-->
не, я тебя не тороплю, конечно, но поставь CS2'ку, а... :)
<a href="http://terrogen.livejournal.com/" target="_blank">ЖЖ - Вестник научного похуизма</a>
Terrogen
Маршал
 
Сообщений: 5347
Зарегистрирован: Пт июл 09, 2004 8:17 pm
Откуда: Riga
Пункты репутации: 0

Сообщение dAnIK SeNT » Чт сен 01, 2005 3:19 pm

2Terrogen
Я уже поставил, просто забыл про тебя совсем <!--emo&;)-->[img]style_emoticons/<#EMO_DIR#>/wink.gif[/img]<!--endemo-->
Ты мне мылом кинь напоминание, чтоб оно мне глаза мозолило <!--emo&:)-->[img]style_emoticons/<#EMO_DIR#>/smile.gif[/img]<!--endemo-->
яНЯЕД ОН СОПЪФЙЕ: Athlon 64 X2 5200+ @2,86GHz / nF 570 SLI (ASUS M2N SLI Deluxe) / 4 Gb RAM (4x1Gb Kingston) / 2,9Tb SATAII (0,50+0,64+0,75+1,00Tb WD) / ASUS 8800 GTS512 / 2x NEC-Optiarc AD-7173 / Thermaltake ToughPower 650W / 2x30W Microlab Solo-2 / 20" LCD Benq FP202W (wide) / openSUSE 11.1 / KDE 4.2.1
<!--coloro:Navy--><span style="color:Navy"><!--/coloro-->оН БЯЕЛ БНОПНЯЮЛ - Б email. б ICQ ОНЪБКЪЧЯЭ ПЮГ Б ОНКЦНДЮ.<!--colorc--></span><!--/colorc-->
dAnIK SeNT
Маршал
 
Сообщений: 5101
Зарегистрирован: Чт мар 28, 2002 7:48 pm
Откуда: яяяп
Пункты репутации: 0

Сообщение Terrogen » Чт сен 01, 2005 4:00 pm

2dAnIK SeNT
Кинул, тема там такая:
<span style='font-size:8pt;line-height:100%'>Напоминание, призванное мозолить глаза</span>

:)))
<a href="http://terrogen.livejournal.com/" target="_blank">ЖЖ - Вестник научного похуизма</a>
Terrogen
Маршал
 
Сообщений: 5347
Зарегистрирован: Пт июл 09, 2004 8:17 pm
Откуда: Riga
Пункты репутации: 0


Вернуться в Программирование

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

cron