●Photoshopを便利にするスクリプト関連まとめ

2013年12月10日    

PhotoshopをJavascriptで自動操作するスクリプトをいくらか書いてきましたが
一覧を作っておきます

●Photoshopのアンドゥをちょっとだけ便利にする方法
人気のTips
Photoshopでアンドゥした時に意図しないレイヤーに移動する事への対処法です

●レイヤーセットの描画モードを一括変換
SaiやClip Studio Paint でPSDを書き出すと
レイヤーセット(グループ)の描画モードが「通常」になるので 「通過」に自動変換

●Photoshopスクリプト2種
スクリプトを実行した時に レイヤー名に含まれている文字を判別して「アクション」を実行する
トリミング枠の内側が指定した解像度になるようにリサイズするスクリプト

●Photoshopでグループ毎にJPEG出力する
レイヤーセット(グループ)を別々の画像として書き出します

●Photoshop書捨てスクリプト
画像のリサイズをせずに「解像度」のみを変更
現在のレイヤの下に新規レイヤを作成する

●Photoshopで不要なチャンネルを削除する2
データの受け渡し等で 不必要なαチャンネルを消してしまいたい場合に

●Photoshopのレイヤー表示状態を操作するスクリプトあれこれ
全てのレイヤーを「表示」にするスクリプトと
選択中のレイヤーの上に重なっているレイヤーを全て非表示にするスクリプト

●Photoshopのベクトルマスクをちょっと便利に

ベクトルマスク切り替えとツール選択を一度に実行するスクリプトです
ショートカット登録で結構便利になるかと。


最後に有償配布になりますが、
イラストレーター等の御仕事をしている方には、必要になってくるはず
●Photoshopでパース線を自動生成!
パスで四角形を指定することで、パースの基準線になるパスを作成します

●Photoshopのベクトルマスクをちょっと便利に

最近、自分の仕事の方で
フォトショップの作業でベクトルマスクを使うことが多くなったのですが、
レイヤーを選択>ベクトルマスクを選択>ペンツールやパス選択ツールに切り替え
といった一連の動作が煩わしく感じたので 省力化のスクリプトを作成してみました。

select_vectorMask.zip
スクリプトを実行すると
レイヤに設定されているベクトルマスクを選択状態にして ペンツールを選択状態にします。
(パス選択ツール又はパスコンポーネント選択ツールの時はそのまま)

ちなみに私はPhotoshopのショートカットのCtrl+*にこのスクリプト実行を割り当てて
左手用のショートカットデバイスを下のように割り当てています。
13121001.png

Ctrl+右クリックでカーソル下にあるレイヤー一覧を表示/選択して
左手コントローラー操作でマスクを選択というスムーズな操作が可能になります
お試しあれ。

いつもの繰り返しになりますが
プリセットへの登録の仕方は続きに

続きを読む "Photoshopのベクトルマスクをちょっと便利に"

●WindowsでのPhotoshop自動操作覚え書き

2013年5月 9日    

今までMacを仕事の環境にしていたためMacOS関連の情報が多かったのですが
Windows環境で作業することになったので
今までと同じことをするために調べたことを覚書も兼ねてまとめておきます


私は3DソフトとPhotoshop等のソフトを連携させて動画を作る仕事をしています
そのため
・3Dソフトで作成したムービーをその場で確認
・3Dソフトからスクリプトを動かしてPhotoshopからテクスチャ等のデータを読み込み
といった処理が頻繁に発生するため自動化をしていました

MacOSXではシェルやAppleScriptといった自動処理のための機能を使っていましたが
WindowsでもWSHとVBScriptで同様のことができるようです
3Dソフトのスクリプト(Python)から上記の操作をする方法を考えます
以下ではマイドキュメントのファイルパスは C:\Users\yukimi\Documents\ として解説します。

まずは3Dソフトでレンダリングが終わったら自動的にムービーを再生する方法を考えます
MacOSXでは3Dソフトからシェルに対してコマンドを打ってたので同様の方法をとります

たとえば マイドキュメントに aaa.avi がある場合コマンドプロンプトで
"C:\Program Files (x86)\Windows Media Player\wmplayer.exe" "C:\Users\yukimi\Documents\aaa.avi"
というように打てばメディアプレーヤーで指定した動画を再生できるようです

同様のコマンドをPythonから実行するためにsubprocessモジュールを使用した例がこうなります
(Pythonではファイルパスの表記の仕方が異なるのに注意)

import subprocess,os

#動画再生ソフトのパス
Prayer_path = "C:/Program Files (x86)/Windows Media Player/wmplayer.exe"
f_path = "C:/Users/yukimi/Documents/aaa.avi"

#ファイルパスをWindows形式に
f_path_w = os.path.normcase(f_path)
args = "\"" + Prayer_path + "\" " + f_path_w
subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)


subprocess.Popen()のオプションを設定して実行することにより戻り値を待たずに実行できます
一方 別のソフトの戻り値を待ちたい場合は subprocess.call() を使うことになります
(subprocess.call()ってムービーを再生させると戻り値を待って 再生中のウィンドウを閉じるまでスクリプトが止まることになります)

さて、2つ目のPhotoshopを操作する方法ですが
Windows上では Photoshopを操作できるスクリプトはVBScriptとjavascriptが利用できます
いずれもテキストエディッタで書いてファイルを実行するだけで操作でき、
また、VBScriptの場合 コマンドプロンプト上で
"C:\Users\yukimi\Documents\aaa.vbs"
といった具合にスクリプトのファイルパスを入力するだけでPhotoshopを操作できます

javascriptを使ったスクリプトも同様にコマンドプロンプトからも実行できるのですが
実行時に常に警告のダイアログが出るようになっているようです
VBScriptで書き直せば警告が出ないのですが、今回は
短いVBScriptを経由してjavascriptを実行することにしました

Photoshpで新規レイヤを作るスクリプト以下に書きます
中継用のVBScriptをVB_Hub.vbs
Photoshopを操作するためのスクリプトをtest.jsx
マイドキュメントに保存してあるものとします。

VB_Hub.vbs

Option Explicit
'コマンドライン引数の取得
Dim oParam
Set oParam = WScript.Arguments
'実行するアプリケーションとしてPhotoshopを指定
Dim objApp
Set objApp = CreateObject("Photoshop.Application")
''スクリプトの実行
objApp.DoJavaScriptFile oParam(0)


test.jsx

#target photoshop
var active_doc = activeDocument
//レイヤの作成
active_doc.artLayers.add()


python

import subprocess,os
#マイドキュメントのパス
mydoc_path = "C:/Users/moonstone/Documents/"
#実行するjavascriptのファイル名
jscript = "test.jsx"
#ファイルパスを実行するOSの形式で取得
jscript_path = os.path.normcase( os.path.join(mydoc_path,jscript) )
VB_Hub = os.path.normcase( os.path.join(mydoc_path,"VB_Hub.vbs") )
#VBScript経由でjavascriptを実行
subprocess.call("CScript \"" + VB_Hub + "\" \"" + jscript_path +"\" //nologo")

3Dソフトのスクリプトから中継になるVBScriptにjavascriptのファイルパスを引数として渡して
Photoshopを操作という形になっています。
Photoshopを自動操作するためのスクリプトはjavascriptで書けばWin・Mac両方で同じものが使えます。
中継用のソフトウェアをこうやって書いておけば指定するファイル名を変更するだけで
色々な機能を実行できるような構造になっているわけです

逆に戻り値をjavascriptからVBScript経由で実行元のソフトに戻す方法もあるようですが
ここでは割愛します。

いかがでしょうか?

続きを読む "WindowsでのPhotoshop自動操作覚え書き"

●Photoshopでパース線を自動生成!

2012年12月 9日    

Photoshopでイラストの背景等を描く時に使えるスクリプトプラグインを作りました メロンブックスDLで販売しています。 Photoshopでパース線を自動生成!スクリプトをダウンロード 12102901.jpg Photoshopのパスで基準になる四角形を作ると 辺の延長線から消失点を計算して 放射状の基準線をパスで作成します。 12120903.jpg 下絵の床のタイル面や窓枠を基準に四角を指定するとこんな感じになります。 奥行きにで線が詰まる具合も計算するようにしてあります。

続きを読む "Photoshopでパース線を自動生成!"

●Photoshopのレイヤー表示状態を操作するスクリプトあれこれ

2012年11月26日    

以前の記事のスクリプトを使ってくださって人から
全てのレイヤーを「表示」状態にするスクリプトをリクエスト頂いたので書いてみた

Show_all_layers.jsx
#target photoshop
//レイヤーセットを辿るための関数
function follw_LayerSets(parent){
	var ChildLyaers= parent.layers;
	for (var i = 0; i < ChildLyaers.length; i++){
		if (ChildLyaers[i].typename == "LayerSet"){
			//レイヤーセットの場合の処理
			//再帰処理
			follw_LayerSets(ChildLyaers[i]);
		}
		ChildLyaers[i].visible= true
	}
}
app.bringToFront();
//ドキュメントが開かれているかどうか判別
if (app.documents.length ==0){
	//ドキュメントが開かれていない場合処理なし
}else{
 	var parent = activeDocument;//作業するドキュメントの参照
	follw_LayerSets(parent);
}
前回のレイヤーセットの描画モードを変更するスクリプトの関数を作り直しただけですね

これだけではつまらないので
自分で作ろうと思っていて後回しにしていたものを書いてみた
選択中のレイヤーの上に重なってるレイヤーを全て「非表示」にするスクリプト

続きを読む "Photoshopのレイヤー表示状態を操作するスクリプトあれこれ"

●レイヤーセットの描画モードを一括変換

2012年11月 5日    

SaiやClip Studio Paint でPSDを書き出すと
レイヤーセット(グループ)の描画モードが「通常」になってしまうので
それを一括して「通過」にできるといいという声があったので作ってみました

//#target photoshop
//レイヤーセットを辿るための関数
function follw_LayerSets(parent){
	var ChildLyaers= parent.layers;
	for (var i = 0; i < ChildLyaers.length; i++){
		if (ChildLyaers[i].typename == "LayerSet"){
			//レイヤーセットの場合の処理
			set_PassThrough(ChildLyaers[i]);
			//再帰処理
			//arguments.callee(ChildLyaers[i])
			follw_LayerSets(ChildLyaers[i]);
		}else{
			//レイヤーセット以外に処理をしたい場合はここに記述
		}
	}
}
//描画モードが通常のレイヤーセットを通過に設定
function set_PassThrough(targetLayer){
	if (targetLayer.typename == "LayerSet"){
		if (targetLayer.allLocked == false){
			if (targetLayer.blendMode == BlendMode.NORMAL){
				targetLayer.blendMode = BlendMode.PASSTHROUGH;
			}
		}
	}
}
//main
// in case we double clicked the file
app.bringToFront();
//ドキュメントが開かれているかどうか判別
if (app.documents.length ==0){
	//ドキュメントが開かれていない場合処理なし
}else{
 	var parent = activeDocument;//作業するドキュメントの参照
	follw_LayerSets(parent);
}

通常モード以外のレイヤーセット(グループ)は影響を受けません
また「通常」のままにしたいレイヤーセット(グループ)がある場合はレイヤーをロックしておいてください。

続きを読む "レイヤーセットの描画モードを一括変換"

●Photoshopスクリプト2種

2012年4月 9日    

Photoshopのちょっとしたスクリプトを2つ

1つ目はレイヤのタイプによってアクションを振り分けたい場合に使うアイデアです
レイヤ名にキーワードを設定してそれによって実行するアクションを振り分けます

#target photoshop
activeLayerName = app.activeDocument.activeLayer.name;
//レイヤ名キーワードが含まれている場合に指定したアクションを実行
//1が含まれている場合 
if (activeLayerName.indexOf("1") != -1){doAction("溶けた鉛","初期設定のアクション")}
//2が含まれている場合
else if (activeLayerName.indexOf("2") != -1){doAction("木製 (50 pixel)","初期設定のアクション")}

indexOf(" ")の" "の部分にキーワードを設定することで条件分岐内の処理させます
doActionはdoAction("アクション名","アクションセット名")という風にアクションパレットにあるコマンドを実行させることができます
else if の文の部分を書き足すことで振り分ける処理を増やせます

12040901.jpg
このテキストを拡張子.jsxで保存してPhotoshopのファイル>スクリプト>参照
で開くことで実行できますし 『参照』で実行する操作をアクションに記録することもできます
他の使い方や他のスクリプト類はこちら を参照してください
http://yukimi.moemoe.gr.jp/MT/archives/photoshop/


2つ目は画像の拡大縮小に使えるアイデア
Photoshopで画像を作る時に大きめに画像を作って 下図のように枠のレイヤを作ることも多いわけですが
枠内の部分の大きさを指定して拡大縮小したい場合もでてきます
そんな時に使えるスクリプト

12040902.jpg

#target photoshop
//幅の初期値を設定
output_width = 1024
//ドキュメントの単位設定を保存
var strtRulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits= Units.PIXELS;
var active_doc = app.activeDocument
var doc_width = active_doc.width
//リサイズ幅を指定
output_width = input_dialog(output_width)
//リサイズ処理
if (output_width){resize_with_frame(output_width)}
//ドキュメントの単位設定を戻す
app.preferences.rulerUnits = strtRulerUnits
//サイズ入力ダイアログ
function input_dialog(width)
{
    dialog1 = new Window("dialog","幅を入力")
    dialog1.bounds = [400,400,600,500]
    dialog1.cancelButton = dialog1.add("button", [40,60,110,60+25], "Cancel", {name: "cancel"})
    dialog1.okButton = dialog1.add("button",[120,60,170,60+25], "OK", { name:"ok"})
    dialog1.sizetxt = dialog1.add("edittext",[10,10,110,10+25], width)
    if (dialog1.show() ==  1){
        return dialog1.sizetxt.text
        }
    }
function resize_with_frame(output_width)
{
    Trsp_to_mask()//透明度から選択範囲を作成
    //選択範囲の拡大縮小で意図しない範囲を消去
    active_doc.selection.expand(2)
    active_doc.selection.contract (2)
    active_doc.selection.invert()
    //範囲を取得
    selection_bound = active_doc.selection.bounds
    selsction_width = selection_bound[2] - selection_bound[0]
    //リサイズ
    active_doc.resizeImage (output_width * doc_width / selsction_width)
    }
//透明部分を選択範囲に
function Trsp_to_mask()
{
var id21 = charIDToTypeID( "setd" );
    var desc4 = new ActionDescriptor();
    var id22 = charIDToTypeID( "null" );
        var ref2 = new ActionReference();
        var id23 = charIDToTypeID( "Chnl" );
        var id24 = charIDToTypeID( "fsel" );
        ref2.putProperty( id23, id24 );
    desc4.putReference( id22, ref2 );
    var id25 = charIDToTypeID( "T   " );
        var ref3 = new ActionReference();
        var id26 = charIDToTypeID( "Chnl" );
        var id27 = charIDToTypeID( "Chnl" );
        var id28 = charIDToTypeID( "Trsp" );
        ref3.putEnumerated( id26, id27, id28 );
    desc4.putReference( id25, ref3 );
executeAction( id21, desc4, DialogModes.NO );
}

枠のレイヤを選択した状態で枠の透明部分を基準が指定した幅になるように拡大縮小します
ただし計算の誤差があるので少し大きさに差が出るようです

●Photoshopのアンドゥをちょっとだけ便利にする方法

2012年3月28日    

PhotoshopCS6のパブリックベータが始まっていますが
古くから絵を描くのに使っている人にとってCS3になった頃からの問題がひとつ
『レイヤを移動した後の操作を戻る操作をするとレイヤが前に使用しているレイヤに戻ってしまう』
というもの(長い...)
標準の取り消し/やり直し(Ctrl+Z)のショートカットを変更してヒストリを戻る操作がCtrl+Zにしている方も少なくないかと思います

PhoroshopCS6でもそのままの仕様のようです
パブリックベータ期間にレポートを受け付けるということなので
過去のフォーラム等でどういう扱いを受けてたのか調べていたら
変化球的な解決策が提示されているのを見つけたのでメモ

http://www.polycount.com/forum/showthread.php?p=1251347#post1251347

英語の読める方にはそのままですが 以下日本語で解説

続きを読む "Photoshopのアンドゥをちょっとだけ便利にする方法"

●Photoshopでグループ毎にJPEG出力する

2011年10月16日    

Twitter上でグループ毎に画像を出力できるスクリプトはないものか
という話題が出てたので作ってみました。
Photoshop用javascriptなのでWin/Mac両対応です
これ自体は使いどころが限られるスクリプトですが 何かの参考に置いておきます

実行するとフォルダ選択ダイアログが出るので その指定したフォルダに
1階層目にあるグループを一つ一つ順に出力してJPEG画像で出力します
ファイル名はレイヤ名を使い、重複が有る場合は末尾に数字を付加するようにしてあります。

#target photoshop

//配列内にobjがあるかをチェック
function check_array(target_array,obj){
    for (var i in target_array){
        if (target_array[i] == obj){
            return true;
            break;
            }
    }
    return false;
 }

//名前の重複を調べて再割当て
function chack_name(array1,name1){
    if (! check_array(array1,name1)){
        return name1;
     }else{
         //序数
         var tag = 1;
         //同一名が100以上になることは考えない
         while (tag < 100){
            var name2 = name1 + "_" + tag;
            if (! check_array(array1,name2)){
                return name2;
            }
            tag += 1;
        }
    }
}

//JPEGで保存
function save_JPG(file_path){
    jpgFile = new File(file_path);
    jpgSaveOptions = new JPEGSaveOptions();
    jpgSaveOptions.embedColorProfile = true;
    jpgSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE;
    jpgSaveOptions.matte = MatteType.NONE;
    jpgSaveOptions.quality = 1;
    app.activeDocument.saveAs(jpgFile, jpgSaveOptions, true,Extension.LOWERCASE);
}

//main
// in case we double clicked the file
app.bringToFront();
app.displayDialogs = DialogModes.NO;
//ドキュメントが開かれているかどうか判別
if (app.documents.length ==0)
{
	//ドキュメントが開かれていない場合処理なし
}
else
{ 
    //Folder.selectDialog ([prompt])  :出力先を指定
    var outputDir = Folder.selectDialog (["Plese select output directory"]);
    //選択されてない場合はnullが返る
    //alert(outputDir );
    if (outputDir != null){
        //作業するドキュメントを取得
        var active_doc = activeDocument;
        try {
            //ルート階層にあるレイヤーセットを取得
            var docLayerSets= activeDocument.layerSets;
            //ルート階層にある全てのレイヤーを取得
            var docArtLyaers= activeDocument.layers;
            var docArtLyaerCount = docArtLyaers.length
            //レイヤの表示状態を退避する配列を作成
            layer_v_array = new Array(docArtLyaerCount);
            //全てのレイヤーの表示状態を取得して非表意に
            for (i = 0; i < docArtLyaerCount; i++){
                //表示状態の取得
                layer_v_array[i] = docArtLyaers[i] .visible;
                //非表示に
                docArtLyaers[i] .visible = false;
            }
            //ファイル名の重複チェックのための配列
            name_array = new Array(docLayerSets.length);
            //グループの書き出し
            for (i = 0; i < docLayerSets.length; i++){
                //レイヤを表示
                docLayerSets[i].visible = true;
                //レイヤ名の取得
                layer_name = docLayerSets[i].name;
                //ファイル名の重複がないか処理
                layer_name = chack_name(name_array,layer_name);
                //名前のリストに追加
                name_array[i] = layer_name;
                //ファイルパスの生成
                var file_path = outputDir  + "/" + layer_name + ".jpg";
                //alert(file_path);
                //ファイルの書き出し
                save_JPG(file_path);
                //対象レイヤーを非表示に
                docLayerSets[i].visible = false;
            }
            //レイヤの表示を元の様態に戻す
            for (i = 0; i < docArtLyaerCount; i++){
                //表示状態の取得
                docArtLyaers[i] .visible = layer_v_array[i];
            }
        } catch (e) {
            if ( DialogModes.NO != app.playbackDisplayDialogs ) {
                alert(e);
            }
    	//return 'cancel'; // quit, returning 'cancel' (dont localize) makes the actions palette not record our script
        }
    }
}


使い方や他のスクリプト類はこちら を参照してください
http://yukimi.moemoe.gr.jp/MT/archives/photoshop/

●Photoshopで不要なチャンネルを削除する2

2010年11月 7日    

昨日はAppleScriptでチャンネルを削除するスクリプトの記事を書きましたが
Windows版でも使えるjavascriptでの方法を調べたので書き残しておきます

まず アルファチャンネルを全て削除するスクリプト
テキストエディッタで

activeDocument.channels.removeAll();
の一行を書いたテキストファイルを作って
「アルファチャンネル全削除.jsx」といった感じに 拡張子.jsxで保存
Photoshopの ファイル>スクリプト>参照... でそのファイルを選択するだけ
画像の色を構成するもの以外のアルファチャンネルが全て削除されます
(RGBモードのファイルなら RGBのチャンネル以外と言った感じ)
ファイルの受け渡しでアルファチャンネルは消してしまたい時に使えるのではないでしょうか

続けて Photoshopは通常操作で複数のチャンネルを削除できないので
選択したチャンネルのみを消すスクリプトも

ch = activeDocument.activeChannels;
for (i = 0; i < ch.length;i++){
	if (ch[i].kind != ChannelType.COMPONENT){ch[i].remove();}
	}
上と同様に色を構成するチャンネルは消さないようにはしてあります

ちなみにフォトショップのスクリプトは
ファイルを選択して実行する行程をアクションに記録する事もできます
スクリプトフォルダ に保存することで 
スクリプトのメニューに表示されるようにすることもできます
(MacのCS3ならアプリケーション/Adobe Photoshop CS3/プリセット/スクリプト)
さらにアクションに記録しておけば
自動処理>バッチ... で複数のファイルを一括処理してしまうこともできるでしょうね

いずれのスクリプトも PhotoshopCS以降が対象です

●Photoshopで不要なチャンネルを削除する

2010年11月 6日    

ちょっと用あって10枚以上のアルファチャンネルのあるファイルの
チャンネルを削除する用があったのでスクリプト書いてみた

数行だけれど必要な人は居るかも

AppleScriptなのでMac専用だけど
需要あったらWindowsでも使えるものを作るかも

tell application "Adobe Photoshop CS3"
	activate
	--doc duplicate current document
	set a to count (channels of current document)
	if a > 3 then
		repeat a - 3 times
			delete channel 4 of current document
		end repeat
	end if
end tell


ちなみに3行目のdoc duplicate current documentは

元のドキュメントを不用意にいじらないようにするために複製で作業するための命令

必要ならば--を削除すると機能します

●Photoshop自動保存スクリプト

2010年7月 8日    

twitterでイラストレーターのCHOCO先生がAutomatorを使って
作業中ファイルの自動保存を作っているとの書き込みをみて
こういうやり方もありますよー的にAppleScriptを書いてメッセージを送ってみた
(Automator:MacOS上でパーツの組み合わせで自動処理をする環境)
(AppleScript:MacOSのソフトを制御できるプログラミング環境Automatorより前からあってより細かい処理が可能)


他の人も使えるでしょうし
少し調整して公開



#保存用フォルダの作成 #あらかじめ保存フォルダを作ってある場合この下4行は必要ありません tell application "Finder" if "autsave" is not in name of every folder of desktop then make folder at desktop with properties {name:"autsave"} end if end tel

#自動保存の常駐ループ on idle
try #保存フォルダの指定 必要に応じて""の中を書き換えてください set save_dir to "~/Desktop/autsave/" tell application "Adobe Photoshop CS3" #作業中のドキュメントのファイル名を取得
set doc_name to name of current document as string set sevepath to save_dir & doc_name save current document in file sevepath as Photoshop format with copying #保存 end tell return 600 #繰り替えす秒数 on error display dialog "保存に失敗しました" end try end idle

Photoshopで最前面の書類の複製を自動保存するようにしてあります
AppleScriptエディッタ(leopard以前ではスクリプトエディッタ)にこちらをコピペしてください

保存時に
フォーマット:アプリケーション 
『実行後自動的に終了しない』をチェックすると常駐アプリになります
CS3以外のバーション利用の場合は初回起動時にPhotoshopを指定してださいと ダイアログが出るかもしれません

●Photoshop書捨てスクリプト

2010年2月13日    

友人から画像に変更を加えずに解像度を変更して
途中に処理をはさむ方法を聞かれたので Photoshop-javascriptを書捨て


//画像の変更をせずに解像度の変更をするスクリプト //今の画像の単位を記憶 ref_ruler = app.preferences.rulerUnits; //画像の単位をピクセルに app.preferences.rulerUnits =Units.PIXELS //現在の画像サイズを記憶 ref_width = activeDocument.width; ref_height = activeDocument.height; ref_resolution = activeDocument.resolution; //解像度の変更 activeDocument.resizeImage(ref_width ,ref_height,72); //スタイルの適応 activeDocument.activeLayer.applyStyle("スタイル 1"); //解像度を戻す activeDocument.resizeImage(ref_width ,ref_height,ref_resolution); //画像の単位設定を戻す app.preferences.rulerUnits = ref_ruler

別の人がtwitterで新規レイヤーを下に作るショートカットないかとつぶやいてたので
スクリプトでつくってみる

//新規レイヤーを現在のレイヤの下に layer_ref = activeDocument.activeLayer; //ダイアログの抑制背設定を記録 dialog_ref = displayDialogs; //JavaScriptExecutionMode.NEVER if ( layer_ref.isBackgroundLayer == 0){ try { displayDialogs = DialogModes.ALL; //レイヤ作成 new_layer = activeDocument.artLayers.add(); //選択されていたレイヤの下に移動 new_layer.move(layer_ref,ElementPlacement.PLACEAFTER ); }finally{ //ダイアログの抑制を戻す displayDialogs = dialog_ref; } }

.jsまたは.jsxの拡張子でテキストファイルに保存して
ファイル>スクリプト>参照で指定すると実行できます
ファイル指定の行程をアクションで記録してファンクションキー割り当てれば
ボタン一発もいけるはず

2/15追記 名前設定する必要があるってことなのでダイアログを出すように変更
また『(Photoshopのあるフォルダ)/プリセット/スクリプト』に
他のプリセットスクリプトといっしょに収めて再起動すれば
標準機能と同じようにキーボードショートカットが割当可能なことが判明

●ShadeのUVをフォトショップの選択範囲に

2009年12月 1日    

書捨て状態だったスクリプトを公開
MacOSXのShadeとPhotoshop環境以外では使いようがないけれど
何かの参考に


import sys
import commands

##ApleScript部分ここから##
AppleScript_="""
on run argv
set argv_ to item 1 of argv
set point_list to {}
tell application "Adobe Photoshop CS3"
--activate
set width_ to width of current document as pixels
set Height_ to height of current document as pixels
if ((count word of argv_) mod 2) = 1 then
return
else
repeat with i from 1 to (count word of argv_) div 2
set a1 to (word (i * 2 - 1) in argv_ as number) * width_
set a2 to (word (i * 2) in argv_ as number) * Height_
set end of point_list to {a1, a2}
end repeat
end if
--選択範囲を追加
select current document region point_list combination type extended
end tell
end run
"""
##AppleScript部分ここまで##

##選択されている面のUVを取得
shd_shape = xshade.scene().active_shape()
f=commands.getoutput('osascript -e \'tell application \"Adobe Photoshop CS3\" to deselect selection of current document\'')
for i in range(shd_shape.number_of_faces):
if (shd_shape.face(i).active):
UV_list = shd_shape.face(i).distance_uv #距離UV
#UV_list = shd_shape.face(i).parameter_uv #パラメータUV値
argv_ = ""
for j in range(len(UV_list)):
(u,v) = UV_list[j]
argv_ = argv_ + str(u) + " " +str(v) + " "
(u,v) = UV_list[0]
argv_ = argv_ + str(u) + " " +str(v)
#print argv_
f=commands.getoutput('osascript -e \'' + AppleScript_ + '\' \''+ argv_ +'\'')
#print f
f=commands.getoutput('osascript -e \'tell application \"Adobe Photoshop CS3\" to activate\'')

●CS4はパレットが自作できる!?

2008年11月25日    


1004850324_182.jpg

http://journal.mycom.co.jp/news/2008/11/21/018/index.html


どの程度できるようになるのか この記事からでは分からないのですが


今も左の画像みたいなツールパレットのソフトを自作しているので
これくらいの機能が実現できるとうれしいなぁと思ったりします。

自分の使う機能をある程度絞れていれば
キーボードに手を伸ばす機会が減るカモ
液タブで狭いスペースを有効活用できるのもいいです

特に色をこねこねできる
スクラッチパッドのようなものが搭載できるとうれしいなぁ
(自分のは実装が中途半端で使ってない)

●CS4の国内発売日等が確定したようで

2008年11月11日    

http://journal.mycom.co.jp/news/2008/11/11/005/index.html
https://store3.adobe.com/cfusion/store/index.cfm?store=OLS-JP&nr=0
Adobe税高いす=□○_
それでも単体製品からのCreative Suiteへのアップグレードは少し安くなったのかな?
個人的には この価格で単体で買う程度の価値は感じるのですが
頭が痛い人も多いでしょうね

年内発売なものの 購入は年明けてからの予定
今回からDL販売も始めるようですね そこもまた悩みどころだ

●AdobeのCS4の情報が続々出ているようですが これはキター

2008年9月24日    

CS4シリーズが米国内では10月発売のようで
色々情報が出始めてるようですね
(常にチェックしていたわけでないので 何時から出てたのかは分かりませんが)

新機能リスト
http://www.adobe.com/products/photoshop/photoshopextended/features/?view=topnew
3Dペイント機能とか 使う人にはうれしい機能が追加されてるみたいで
CS3の使い勝手から考えると 期待しすぎない程度に待つよさそうかな・・・

で....『Fluid canvas rotation』
...
..

キターーーーーーーー 待ちに待ったカンバス回転機能ですよ
全国10万の絵描きユーザーの歓喜のこだまが聞こえますよ

●自動モデリングですよ

2008年6月 4日    

827615700_237.jpg
3Dソフト上のカメラ方向から見た形状を
Photoshopで作ったパスの形状に変形するスクリプトです
上の図では球体(赤)を細長い形(青)に変形してます

構想1年 ちまちまと機能を開発/テストすること3ヶ月
やっとこさ動くモノができましたよヽ(゜▽゜≡゜ワ゜)ノ

Photoshop上でのマスク切り抜き作業を
クリッピングマスクでやっているので
条件がよければ Photoshpの作業の後のモデリング作業を自動化できるってわけです

これで作業時間の短縮に・・・ なるといいなぁ

●Cintiq 12WXですってよ 奥さん

2007年10月25日    

昨日の段階でヨーロッパ版のサイトでは公開されてたので
国内発表されるのを待っていたのですが
小型液タブ Cintiq 12WX発表ですよ!!
http://tablet.wacom.co.jp/what/detail/detail_press.html?nno=476

intuos3 631Wに液晶を重ねたような構成で
ノートPC並みの重さで 139,800円...。
やっと待っていたものが出たという感じ!!!

●PhotoshopCS2Extended 試し中

2007年6月26日    

Photoshopの新バージョンのCS3
土曜日に買って来たのだけれど仕事あったりで
やっと今ちまちまといじり中

パレット配置とか やり方自体が変わってて ちょっと戸惑ったり
目当ての機能を探すのに苦労したり
(メニューの項目を非表示にできるようになっていて 消えていた)
ショートカットの設定をし直したり
自作スクリプトの動作の検証をしたり


今回OSのアップデートも同時にやらなければいけなかったので
ちょっと一苦労
前のOSと切り替えてブートしたり 設定ファイルをコピーしたり
MacOSでよかったと思うことしきりです


上位版のExtendedではビデオ編集機能が加わっているのですが
なかなか面白い拡張ですね 動作の早さがかなり魅力です
アップデート¥48,800の価値は...うむぅ...その分使いこなしたいですね

●雪見流背景作画法

2004年5月28日    

雪見流背景作画法
<<TopPage
はじめに
この作画法解説は 雪見月が知り合いの絵描きさんからの
「どうやって描いているか知りたい」との言葉をうけて、やり方をおおまかに綴ったものです。
フォトショップの基本操作や選択範囲の使い方の基本はもとより
クイックマスクやアルファチャンネル等の使い方を理解していることを前提に進めますので
 あしからず。
3Dで下絵
私は、3DCGで作った画像を下絵に背景を作成しています。
シーンに合わせて作りおきしておいたパーツや新しくモデリングしたりして組み上げます

今回の解説に使う3D画像と完成画像はこんな感じです。  なんか全然違いますね(笑
ビフォーアフター
普段はもう少し3Dの方で作り込むのですが、
今回は説明箇所を明解にするために簡単なレンダリングのみにしてみました
私はShadeという3Dソフトを利用していますが、これくらいの画像ならどんなソフトでも可能かと思います
3Dでマスク
下絵を作った3Dデータからマスク画像を作ります。
他の方法だと着色時間の6割を占めるマスク画像の作成が自動的にやれるというのが
3Dを下絵で作業する最大のメリットではないかと思います。
(a) (b) (c)
(a)3Dソフトの作業画面マスクを切りたい物の色を黒に設定して他のモノの色を白に設定します。
カゲを全く生成させないように設定をすることできれいなマスク画像が作られます(b)
当然、きちんと作り込んであれば 机の脚だけだとかという風に必要な部分のマスクを切ることもできます。
また、これとは別にシーン自体のXYZ方向のマスクも作ってPhotoshopのαチャンネルに保存しておきます(c)
ちなみに(c)はX方向を向いている面のみを抽出したものです.
着色
後はマスクを活用しつつ 地道に着色していきます。
(d) (e) (f)
机などの個々のマスクはαチャンネルに保存せずに 必要になった時にその都度レンダリングして
Photoshopのクイックマスクにコピー&ペーストしています
そのため 3DソフトとPhotoshopとを行き来しながらの作業になります

また、時には3Dの方で陰影をレンダリングして ディテールアップに使うこともあります。(e)
この扉の場合 レンダリングした画像をレイヤーとしてペーストして乗算やオーバーレイ等にして使用しています
どうやって素材を組み合わせていくかは カンが頼りです 色々試してカンを養っていくしかないですホント

バランスを確かめつつ 小物類も追加していきます(f)
今回は イスも小物扱いで後から追加しました。
全部最初から描いておいてもいいのですが 時間差分等 後の調整がしにくいので
どれを最初から描いておいてどれを小物として調整をするかは始めに考えておきます。
油よけも3Dで形状を作って 赤枠の画像をテクスチャとして適応しています
こういった変形した形状をうまく塗るのは至難の業ではないでしょうか..
ただし、レンダリング画像を直接使うとどうしても『浮く』ため
着色用のマスク画像として利用しています