Photoshopでpsdに不要?なメタデータができていて「別名で保存」したファイル容量が重くなることがある件

April 20 [Wed], 2016, 13:16
こんにちは!ピーチ・ティです。

今回はPhotoshopのお話です。


Photoshopでpsdファイルを「別名で保存」でまるっとjpgで書き出しするときに、
psdを作った最初の頃は500KBくらいに保存できていたものが
作業を重ねてから書き出すと8MBほどになってしまうということが起こり、、。
検索してみたところどうやらpsdファイルに不要?なメタデータができているのが原因らしく
取り除く方法を書いた記事を見つけたので備忘録として残しておきます!
(当方Mac、PhotoshopCS6使用)

■psd保存ファイルの容量が変わる
https://forums.adobe.com/message/8666349
※スクリプトを使うので自己責任でお願いします。

上の記事で紹介されているようにスクリプトを実行してから上書き保存したところ
psdファイルの容量が9MBほど減り、
「別名で保存」でまるっとjpg書き出しした際のファイルサイズも
500KBくらいに戻りました!

どのタイミングでメタデータが生成されるのか分かりませんが、
困りもの、、一応解決できてよかったです!
スッキリ!

Illustratorでプルダウン選択できるダイアログ作成

April 04 [Mon], 2016, 14:31
こんにちは!ピーチ・ティです。

前回に引き続き、Illustratorのjsxスクリプトのお話です。
Illustratorでプルダウン選択できるダイアログ作成をする機会があったので
このやり方が望ましいかはわかりませんが備忘録的に記事を書いています!

(ところで、yaplogではインデントの半角空白が消えてしまうのですね、、
代わりに全角空白使ってみましたが不便ですね、他のブログにしようかなぁ、、)


↓ダイアログイメージ

プルダウンで赤系と青系を選択できるようになってます。

-----------------------------------------------------------------------------
// 【ファイル構成前提】
// ースクリプト.jsx
// ーimages
//  ーred
//   ーredColor_00.png
//    〜
//   ーredColor_06.png
//  ーblue
//   ーblueColor_00.png
//    〜
//   ーblueColor_04.png

function main() {
 // スクリプトファイルのフルパスを取得。
 var fullFilepath = $.fileName;
 // スクリプトファイル名だけ取り出す。
 var filename = $.fileName.split('/').pop();
 // フルパスからスクリプトファイル名を取り除く。
 var path = fullFilepath.replace(filename, '');
 // スクリプトファイルのあるフォルダパスから画像へのパスを連結させる。
 var imgpath = path + 'images/peach.png';
 // 現在選択されている色系統のインデックスを示す。
 // kindNameAryのうち初期選択したいインデックスをここで指定できる。
 var currentSelKindNo = 0;
 // 大元のダイアログ生成。
 var dialog = new Window('dialog', 'selectColor', [0, 0, 400, 260]);

 // 赤系、青系以外も増やす場合はここに追加していく。
 var kindNameAry = new Array( 'red', 'blue' );
 var txtAry = new Array( '赤系', '青系' );

 // 色系統ごとのオブジェクトを作成。
 var kindObjAry = new Array();
 for( var i=0; i<kindNameAry.length; i++ ){
  var kindObj = new Object();
  kindObj.name = kindNameAry[i];
  kindObj.colorNum = Folder( filepath + 'images/' + kindObj.name + '/' ).getFiles('*.png').length;
  kindObj.colorImgPathAry = new Array();
  for(var n=0; n<kindObj.colorNum; n++){
   var numStr = n;
   if(numStr < 10){ numStr = '0' + numStr; }
   kindObj.colorImgPathAry.push(filepath + 'images/' + kindObj.name + '/' + kindObj.name + 'Color_' + numStr + '.png');
  }
  kindObj.colorRBAry = [];
  kindObj.txt = txtAry[i];
  kindObjAry[i]= kindObj;
 }

 // 色系統ごとのダイアログの準備。
 // ここで全部読み込んでおいて、初期選択されていないものを使用不可にしている。
 for(var i=0; i<kindObjAry.length; i++){
  setToDialog(kindObjAry[i]);
  if( i != currentSelKindNo ){
   setGroupEnabledVisible( kindObjAry[i].group, false );
  }else{
   setRBActiveValue( kindObjAry[i].colorRBAry[0], true );
  }
 }

 // キャンセルボタン、OKボタンの準備。
 var cancelBT = dialog.add('button', [200, 200, 280, 230], 'Cancel', {name: 'cancel'});
 cancelBT.onClick = function(){ dialog.close(); }
 var okBT = dialog.add('button', [300, 200, 380, 230], 'OK');
 okBT.onClick = function(){
  // ここに、OKボタンが押されたら行いたい処理を記載する。
  // 例えば、下記では選択された項目名をalertで表示するようにしている。
  for( var i=0; i<kindObjAry[currentSelKindNo].colorNum; i++ ){
   if( kindObjAry[currentSelKindNo].colorRBAry[i].value == true ){
    alert(kindObjAry[currentSelKindNo].txt + i);
    break;
   }
  }
 }

 // 色系統ごとのドロップダウンリストの準備。
 var kindDL = dialog.add( 'dropdownlist', [ 20, 20, 200, 40 ], [ kindObjAry[0].txt, kindObjAry[1].txt ] );
 kindDL.selection = kindDL.items[currentSelKindNo];
 kindDL.onChange = function(){
  // 前回選択中の色系統のダイアログを使用不可にして、今回選択中の色系統のダイアログを使用可能にする。
  setGroupEnabledVisible( kindObjAry[currentSelKindNo].group, false );
  for( var i=0; i<kindNameAry.length; i++ ){
   if( kindDL.selection.index == i ){
    setGroupEnabledVisible( kindObjAry[i].group, true );
    setRBActiveValue( kindObjAry[i].colorRBAry[0], true );
    currentSelKindNo = i;
   }
  }
 }

 // 大元のダイアログを表示。
 dialog.center();
 dialog.show();
}

main();

// 受け取った色系統のダイアログ内容を設定する。
function setToDialog( setObj ){
 setObj.group = dialog.add('group', [0, 40, 360, 400]);
 setObj.RBGroup = setObj.group.add('group',[0, 0, 360, 400]);
 var colorIMGAry = [];
 var RBWidth = 80, imgWidth = 60, imgHeight = 20;
 var firstRBX = 20, firstRBY = 20, firstImgX = 60, distanceX = 120, distanceY = 50;

 for(var i=0; i<setObj.colorNum; i++){
  setObj.colorRBAry.push( setObj.RBGroup.add( 'radiobutton',
  [ firstRBX + distanceX*(i%3), firstRBY + distanceY*Math.floor(i/3), firstRBX + RBWidth + distanceX*(i%3), firstRBY + imgHeight + distanceY*Math.floor(i/3) ], setObj.txt+i
  ));
  colorIMGAry.push( setObj.group.add( 'image',
   [ firstImgX + distanceX*(i%3), firstRBY + distanceY*Math.floor(i/3), firstImgX + imgWidth + distanceX*(i%3), firstRBY + imgHeight + distanceY*Math.floor(i/3) ], setObj.colorImgPathAry[i]
  ));
 }
}

// 受け取ったグループのenabled、visibleをflgの状態に変更する。
function setGroupEnabledVisible( groupObj, flg ) {
 groupObj.enabled = flg;
 groupObj.visible = flg;
}

// 受け取ったラジオボタンのactive、valueをflgの状態に変更する。
function setRBActiveValue( RBObj, flg ) {
 RBObj.active = flg;
 RBObj.value = flg;
}
-----------------------------------------------------------------------------

※フルパス取得方法はこちらの記事にあったやり方を使用しています。
https://forums.adobe.com/message/1849790#1849790

※ダイアログ関連の各関数はこちらの記事の「GUI - Control」を参考にしています。
http://www.openspc2.org/reibun/AdobeJS/CS6/index.html


免責事項
本コードはMac環境のIllustaror CS6、CC2014にて動作確認しており、
他バージョンにての動作は確認できていません。
本コードはどなたでもご自由にお使いいただけますが、
本コードを使用する事により発生したいかなる問題にも
責任を追う事ができません。
ご使用は自己責任でお願いします。

Illustratorのjsxスクリプトダイアログでの画像表示のためのパス指定方法

February 17 [Wed], 2016, 22:24
お久しぶりです!ピーチ・ティです。

Illustratorのjsxスクリプトダイアログでの画像表示を
したい機会があったのですがパス指定の情報があまりなくて詰まったので、
このやり方が望ましいかはわかりませんが備忘録的に記事を書いています!
スクリプトファイルと同じフォルダに「images」フォルダがあり、
その中の「peach.png」を表示する場合の方法です。



↓ダイアログイメージ

-----------------------------------------------------------------------------
function main() {
// スクリプトファイルのフルパスを取得
var fullFilepath = $.fileName;
// スクリプトファイル名だけ取り出す
var filename = $.fileName.split('/').pop();
// フルパスからスクリプトファイル名を取り除く
var path = fullFilepath.replace(filename, '');
// スクリプトファイルのあるフォルダパスから画像へのパスを連結させる
var imgpath = path + 'images/peach.png';

var dialog = new Window('dialog', 'imageSample', [0, 0, 300, 260]);
var tmpIMG = dialog.add('image', [20, 20, 170, 170], imgpath);

var okBT = dialog.add("button", [200, 210, 280, 240], "OK");
okBT.onClick = function(){dialog.close();}

dialog.center();
dialog.show();
}

main();
-----------------------------------------------------------------------------

※フルパス取得方法はこちらの記事にあったやり方を使用しています。
https://forums.adobe.com/message/1849790#1849790


免責事項
本コードはMac環境のIllustaror CS6、CC2014にて動作確認しており、
他バージョンにての動作は確認できていません。
本コードはどなたでもご自由にお使いいただけますが、
本コードを使用する事により発生したいかなる問題にも
責任を追う事ができません。
ご使用は自己責任でお願いします。

【150831、ver1.3追加】flashで下階層の同じ位置(ステージ基準)にペーストするjsfl

June 24 [Wed], 2015, 11:23
こんにちは!ピーチ・ティです。

flashでもIllustratorの「同じ位置にペースト」ように
シンボル内でもステージ基準で同じ位置にペーストするコマンドを
作ってみました!
ただ、コピー元より下階層にしかペーストできません。。
ニッチかつ制限やできないことが多いですが、
参考にカスタマイズしたりして使ってもらえればと思います。
予告なく下げることもあるかと思いますのでご了承下さい!



■■■■■■■■■■■■■■■■■■■■■■■
使用手順
※わかりにくい部分が多いと思うのでsample.flaも見ながら読み進めてもらえればと思います。

■1(初回のみでOK)
以下のフォルダにコマンド「InnerSamePosPaste.jsfl」を配置する。
・Windows7
C:\Users\(ユーザ名)\AppData\Local\Adobe\Flash CS6\language\Configuration\
・Mac OS X
/Users/(ユーザ名)/Library/Application Support/Adobe/Flash CS6/ja_JP/Configuration/Commands
(他環境の場合は「flash コマンド 保存場所」で検索してみて下さい!)

■2(初回のみでOK。任意だが行っておくと便利)
Flashのショートカット編集で、追加したコマンドに任意のショートカットを割り当てておく。

■3
Flashでflaファイルを作成し、
コピーしたいオブジェクトが存在する階層で、コピー先オブジェクトをシンボル化して
インスタンス名「mc_containtop」を一旦付けておく。
コピーしたいオブジェクトをコピーしておく。

■4
貼り付け先のインスタンス内まで潜り
(条件:途中階層もグループでなくシンボルにして、
任意の他と被らないインスタンス名を付けておく)
「コマンド」→「InnerSamePosPaste」
(手順2でショートカットを設定していたらそれを使う)で貼り付けると
ステージ基準で同じ位置にペーストされる。
一旦付けたインスタンス名「mc_containtop」を外しておく。

★うまくいかない場合には?
 ・同じインスタンス名を2つ以上使っているところがないかチェック
  (インスタンス名をで判別しているので
  2つ以上同じものがあるとうまく動作しない可能性あり。)
■■■■■■■■■■■■■■■■■■■■■■■


-----------------------------------
ダウンロード(「名前を付けてリンク先を保存」推奨)>sample.fla
ダウンロード(「名前を付けてリンク先を保存」推奨)>InnerSamePosPaste_ver1.1.jsfl
※150826 sample.fla追加、
 jsflファイル内で不要な処理をしてるところを見つけて除いたver1.1になりました(機能は変更なし)
-----------------------------------
【150831追記】
以下のように制限を減らしたver1.2を作成しました。

使用手順■4の
(条件:途中階層もグループでなくシンボルにして、任意の他と被らないインスタンス名を付けておく)

(条件:途中階層もグループでなくシンボルにしておく)


ダウンロード>InnerSamePosPaste_ver1.2
-----------------------------------
【150831追記】
ver1.2をリファクタリングしたver1.3作成しましたのでできるだけこちらを使って頂きたいです。
(今度整理したいです、、)


ダウンロード>InnerSamePosPaste_ver1.3
-----------------------------------

免責事項
本ファイルはWindows環境のFlash CCにて動作確認しており、
下位バージョンにての動作は確認できていません。
本ファイルはどなたでもご自由にお使いいただけますが、
本ファイルを使用する事により発生したいかなる問題にも
責任を追う事ができません。
ご使用は自己責任でお願いします。