javascript に関する質問です。
javascriptに詳しい方、もしくはスクリプトを作成する時間がある方で作成できるかたおりましたらよろしくお願いいたします。
現在adobe photoshop7を使用しているのですが、photoshopのスクリプトを作成したいと考えています。
作成しようとしているスクリプトは、プログラムを実行すると6枚の写真を元に加工された写真を3枚自動で作成するというプログラムです。
加工するフォルダなどがあるファイルの環境は以下になります。
http://oskuni7.sakura.ne.jp/hatena/question5/foruda.htm
実行したいプログラムの詳細は以下になります。
http://oskuni7.sakura.ne.jp/hatena/question5/puroguramu.htm
scriptを作成していただき、実際に動いた場合は1000pt差し上げさせていただければと考えております。
adobe script に関してのアドバイスでもかまいません。
お手数をおかけしますが、どうぞよろしくお願いいたします。
一応複数ファイルに対応してみました。
// Global define // ★★★実際のパスに変更してください。 var rootFolder = "C:/Users/yoshi/Desktop/adobe script/"; var startRulerUnits = preferences.rulerUnits; var startTypeUnits = preferences.typeUnits; var startDisplayDialogs = displayDialogs; // Set preferences.rulerUnits = Units.PIXELS; preferences.typeUnits = TypeUnits.PIXELS; displayDialogs = DialogModes.NO; // Jpeg Option var jpegOpt = new JPEGSaveOptions(); jpegOpt.embedColorProfile = true; jpegOpt.quality = 2; jpegOpt.formatOptions = FormatOptions.PROGRESSIVE; jpegOpt.scans = 3; jpegOpt.matte = MatteType.NONE; // 画像サイズ変換関数 function SizeConvert( srcFolder, dstFolder ) { var folderObj = Folder(rootFolder + srcFolder ); var fileList = folderObj.getFiles(); for( var i=0 ; i< fileList.length ; i++ ) { srcFileObj = new File( fileList[i].fsName ); var dFilePath = fileList[i].fsName.replace( srcFolder, dstFolder ); var dstFileObj = new File( dFilePath ); srcFileObj.copy( dstFileObj ); var cPic = open(dstFileObj); cPic.activeLayer.applySharpen(); cPic.resizeImage(600,450); cPic.saveAs(dstFileObj, jpegOpt, true, Extension.LOWERCASE); cPic.close(SaveOptions.DONOTSAVECHANGES); } } // 画像結合関数 function MergeImage( srcFolderArray, dstFolder ) { var folderObj = Folder(rootFolder + srcFolderArray[0] ); var selRegion = Array( Array(0, 0), Array(1, 0), Array(1, 1), Array(0, 1), Array(0, 0)); var fileList = folderObj.getFiles(); for ( var n=0 ; n< fileList.length ; n++ ) { var dstPath = fileList[n].fsName.replace( srcFolderArray[0], dstFolder ); var dstFile = new File( dstPath ); var cPic = documents.add( 600, 450, 72, dstFile.name ); for( var p=0 ; p<4 ; p++ ) { var srcFileObj = new File( fileList[n].fsName.replace( srcFolderArray[0], srcFolderArray[p] )); var addPic = open( srcFileObj ); addPic.activeLayer.applySharpen(); addPic.resizeImage( 300, 225 ); addPic.activeLayer.copy(); addPic.close(SaveOptions.DONOTSAVECHANGES ); activeDocument = cPic; cPic.selection.select( selRegion ); cPic.paste(); cPic.activeLayer.translate( ( p % 2 ) * 300, Math.floor( p / 2 ) * 225 ); } cPic.saveAs( dstFile, jpegOpt, true, Extension.LOWERCASE); cPic.close( SaveOptions.DONOTSAVECHANGES ); } } // 変換処理 SizeConvert( "kakou_picture1", "kakougo_picture1" ); SizeConvert( "kakou_picture2", "kakougo_picture2" ); MergeImage( Array( "kakou_picture3", "kakou_picture4", "kakou_picture5", "kakou_picture6" ), "kakougo_picture3" );
画質に強力なこだわりを持っていなければ、Perl+GD や PHP+GD などプログラミング言語を使うのはどうでしょう?
ご回答ありがとうございます。
+GDというプログラム言語があることは知りませんでした。
検討してみます。
PhotoShop のスクリプトは以前から興味があったのですが、
今回の質問が面白そうでしたので、これを機会に使ってみました。
一応、下記のスクリプトでご希望の処理になっていないでしょうか。
// Global define // ★★★実際のパスに変更してください。 var rootFolder = "C:/Documents and Settings/aiomock/デスクトップ/adobe script/"; var cPic; var srcFileObj; var dstFileObj; var startRulerUnits = preferences.rulerUnits var startTypeUnits = preferences.typeUnits var startDisplayDialogs = displayDialogs // Set preferences.rulerUnits = Units.PIXELS preferences.typeUnits = TypeUnits.PIXELS displayDialogs = DialogModes.NO // Jpeg Option var jpegOpt = new JPEGSaveOptions(); jpegOpt.embedColorProfile = true; jpegOpt.quality = 2; jpegOpt.formatOptions = FormatOptions.PROGRESSIVE; jpegOpt.scans = 3; jpegOpt.matte = MatteType.NONE; // 画像サイズ変換関数 function SizeConvert( srcFolder, dstFolder, fClose ) { var folderObj = Folder(rootFolder + srcFolder ); fileList = folderObj.getFiles(); if( fileList.length >= 1 ) { srcFileObj = new File( fileList[0].fsName ); var dFilePath = fileList[0].fsName.replace( srcFolder, dstFolder ); dstFileObj = new File( dFilePath ); srcFileObj.copy( dstFileObj ); cPic = open(dstFileObj); preferences.rulerUnits = Units.PIXELS; cPic.activeLayer.applySharpen(); cPic.resizeImage(600,450); cPic.saveAs(dstFileObj, jpegOpt, true, Extension.LOWERCASE); if( fClose == true ) { cPic.close(SaveOptions.DONOTSAVECHANGES); } } } // 画像結合関数 function addImage( srcFolder, xPos, yPos ) { var selRegion = Array( Array(0, 0), Array(1, 0), Array(1, 1), Array(0, 1), Array(0, 0)); var folderObj = Folder(rootFolder + srcFolder ); fileList = folderObj.getFiles(); if( fileList.length >= 1 ) { srcFileObj = new File(fileList[0].fsName); var addPic = open( srcFileObj ); addPic.activeLayer.applySharpen(); addPic.resizeImage( 300, 225 ); addPic.activeLayer.copy(); activeDocument = cPic; cPic.selection.select( selRegion ); cPic.paste(); cPic.activeLayer.translate( xPos, yPos ); addPic.close( SaveOptions.DONOTSAVECHANGES ); } if( xPos != 0 && yPos != 0 ) { cPic.saveAs(dstFileObj, jpegOpt, true, Extension.LOWERCASE); cPic.close( SaveOptions.DONOTSAVECHANGES ); } } // 変換処理 SizeConvert( "kakou_picture1", "kakougo_picture1" , true); SizeConvert( "kakou_picture2", "kakougo_picture2" , true); SizeConvert( "kakou_picture3", "kakougo_picture3", false ); addImage( "kakou_picture3", 0, 0); addImage( "kakou_picture4", 300, 0); addImage( "kakou_picture5", 0, 225); addImage( "kakou_picture6", 300, 225);
ご回答ありがとうございます。試してみようかと思います。
エラーが発生してしまいました。
エラー 21:undefined がオブジェクトでありません。
ライン:66
→ cpic.saveAs(dstFileObj,jpegOop.true.Extension.LOWERCASE);
こちらはどのように対処すればよろしいでしょうか。
お手数をおかけしますがどうぞよろしくお願いいたします。
一応複数ファイルに対応してみました。
// Global define // ★★★実際のパスに変更してください。 var rootFolder = "C:/Users/yoshi/Desktop/adobe script/"; var startRulerUnits = preferences.rulerUnits; var startTypeUnits = preferences.typeUnits; var startDisplayDialogs = displayDialogs; // Set preferences.rulerUnits = Units.PIXELS; preferences.typeUnits = TypeUnits.PIXELS; displayDialogs = DialogModes.NO; // Jpeg Option var jpegOpt = new JPEGSaveOptions(); jpegOpt.embedColorProfile = true; jpegOpt.quality = 2; jpegOpt.formatOptions = FormatOptions.PROGRESSIVE; jpegOpt.scans = 3; jpegOpt.matte = MatteType.NONE; // 画像サイズ変換関数 function SizeConvert( srcFolder, dstFolder ) { var folderObj = Folder(rootFolder + srcFolder ); var fileList = folderObj.getFiles(); for( var i=0 ; i< fileList.length ; i++ ) { srcFileObj = new File( fileList[i].fsName ); var dFilePath = fileList[i].fsName.replace( srcFolder, dstFolder ); var dstFileObj = new File( dFilePath ); srcFileObj.copy( dstFileObj ); var cPic = open(dstFileObj); cPic.activeLayer.applySharpen(); cPic.resizeImage(600,450); cPic.saveAs(dstFileObj, jpegOpt, true, Extension.LOWERCASE); cPic.close(SaveOptions.DONOTSAVECHANGES); } } // 画像結合関数 function MergeImage( srcFolderArray, dstFolder ) { var folderObj = Folder(rootFolder + srcFolderArray[0] ); var selRegion = Array( Array(0, 0), Array(1, 0), Array(1, 1), Array(0, 1), Array(0, 0)); var fileList = folderObj.getFiles(); for ( var n=0 ; n< fileList.length ; n++ ) { var dstPath = fileList[n].fsName.replace( srcFolderArray[0], dstFolder ); var dstFile = new File( dstPath ); var cPic = documents.add( 600, 450, 72, dstFile.name ); for( var p=0 ; p<4 ; p++ ) { var srcFileObj = new File( fileList[n].fsName.replace( srcFolderArray[0], srcFolderArray[p] )); var addPic = open( srcFileObj ); addPic.activeLayer.applySharpen(); addPic.resizeImage( 300, 225 ); addPic.activeLayer.copy(); addPic.close(SaveOptions.DONOTSAVECHANGES ); activeDocument = cPic; cPic.selection.select( selRegion ); cPic.paste(); cPic.activeLayer.translate( ( p % 2 ) * 300, Math.floor( p / 2 ) * 225 ); } cPic.saveAs( dstFile, jpegOpt, true, Extension.LOWERCASE); cPic.close( SaveOptions.DONOTSAVECHANGES ); } } // 変換処理 SizeConvert( "kakou_picture1", "kakougo_picture1" ); SizeConvert( "kakou_picture2", "kakougo_picture2" ); MergeImage( Array( "kakou_picture3", "kakou_picture4", "kakou_picture5", "kakou_picture6" ), "kakougo_picture3" );
ご回答ありがとうございます。
ご回答ありがとうございます。