クリエイター手抜きプロジェクト[216]hotoshop CS3/CS4編 Web上にある画像を読み込み加工し別名で保存する/古籏一浩

投稿:  著者:  読了時間:8分(本文:約3,700文字)


今回は、インターネット上にある画像ファイルを読み込み、Photoshop CS3/CS4で加工処理した後、画像を別名で保存します。Photoshop CS3/CS4にはソケット通信機能がありますが、画像などのダウンロードはBridge CS3/CS4を経由する方が簡単です。

基本的な方法はこれまでと同じです。サンプルでは読み込み、保存する画像形式はJPEGですが、PSDでもTIFFでも可能です。画像形式はPhotoshop CS3/CS4で読み込めるものであれば大丈夫です。ただし、ファイルが壊れていたり拡張子と実際の画像形式が合っていない場合にはエラーが発生します。サンプルでは、エラーの処理はしていません。通信エラーがない限りは大丈夫だとは思います。


まず、以下のスクリプトで読み込むファイルがあるURLを変更してから、ホームフォルダにgetImageData.jsxというファイル名で保存します。

画像のURLは
var imgURL = "http://www.openspc2.org/HDTV/footage/HD/60i/train/C12/0002/sample.jpg";

http://www.openspc2.org/HDTV/footage/HD/60i/train/C12/0002/sample.jpg
を変更してください。

一時的にtemp.jpgファイルをホームフォルダに保存しますが、画像をリンクするのであれば、以下の ~/temp.jpg の部分を保存したいパスに変更します。

var fileObj = getHttpData(imgURL, "~/temp.jpg");

これで準備OKです。


// サーバー上にある画像(JPEG)ファイルを読み込む
var imgURL = "http://www.openspc2.org/HDTV/footage/HD/60i/train/C12/0002/sample.jpg";
var fileObj = getHttpData(imgURL, "~/temp.jpg");
var flag = fileObj.open("r");
if(flag != true){
alert("エラーです");
}
// HTTPを使って指定されたサーバーのデータを読み込みファイルオブジェクトを返す
function getHttpData(sURL, filePath){
if ( !ExternalObject.webaccesslib ) {
ExternalObject.webaccesslib = new ExternalObject("lib:webaccesslib");
}
var http = new HttpConnection(sURL);
http.response = new File(filePath);
http.execute();
http.response.close();
return new File(filePath);
}

保存したら、次に以下のスクリプトをPhotoshop CS3/CS4から実行します。これでファイルがBridge CS3/CS4経由で、ホームフォルダに temp.jpg という名前で保存されます。

その後、Photoshop CS3/CS4でぼかし処理が行われ temp2.jpg という名前で保存されます。場合によっては、保存時にダイアログが表示されることがあります。運悪くインターネットからファイルがダウンロードできなかった場合は、ずっと待ちの状態になって終了できません。その場合は、ホームフォルダにtemp.jpg という名前のファイルを作成すれば終了します。

ぼかしは

app.activeDocument.activeLayer.applyBlurMore();

の行を3回並べて書いてあるだけですが、この命令を変更すれば様々なエフェクトを適用させることができます(どのようなエフェクトがあるかは付属のリファレンスに掲載されています)。


// Photoshop CS3からBridge CS3を経由して画像を読み込みフィルタを適用し保存する
var fs = new File("~/getImageData.jsx");
fs.open("r");
bridge2.executeScript(fs.read());
fs.close();
// temp.jpgファイルを読み込み
var fs2 = new File("~/temp.jpg");
while(!fs2.exists);
wait(2); // 待ち時間を2秒に設定
// 画像を開く
var fileRef = new File ("~/temp.jpg");
app.open(fileRef);
// 3回、ぼかし(強)を適用
app.activeDocument.activeLayer.applyBlurMore();
app.activeDocument.activeLayer.applyBlurMore();
app.activeDocument.activeLayer.applyBlurMore();
// JPEG形式で保存する
var saveFile = new File ("~/temp2.jpg");
jpegOpt = new JPEGSaveOptions();
jpegOpt.embedColorProfile = true;
jpegOpt.quality = 8;
jpegOpt.formatOptions = FormatOptions.PROGRESSIVE;
jpegOpt.scans = 3;
jpegOpt.matte = MatteType.NONE;
activeDocument.saveAs(saveFile, jpegOpt, true, Extension.LOWERCASE);
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
// 待ち時間を処理する関数
function wait(sec){
var e = (new Date()).getTime() + sec*1000;
while((new Date()).getTime() <= e);
}


【古籏一浩】openspc@po.shiojiri.ne.jp
< http://www.openspc2.org/ >

MacOS X Snow Leopardにすると、動作は速くなったような感じになりますが、QuickTime 7でH264エンコードを複数行うと、信じられないほど遅くなります。以下に実際の映像を用意しました。文字は0.5〜1秒間隔でしか入力できず、プルダウンメニューの選択時の点滅速度もスローです。
< http://www.openspc2.org/blog/photo/slow_leopard.mov >

時計もひどい時は5〜6秒に1回くらいしか更新されないという無惨な状態に…。以前のLeopardでは、同じことをしても(これ以上やっていましたが)こんなひどい状態にはなりませんでした。これでも、CPUパワーの表示は20%前後。機種はMacPro(2 x 2.26GHz Quad-Core Intel Xeon)なんですが、うちだけでしょうか…? 今までボリューム名をSnowLeopardにしてましたが、SlowLeopardに変更しました……。

諏訪湖新作花火の映像を追加しました。一番最後のだけ見れば十分かも。
・諏訪湖新作花火(遠くから撮影しているので音はありません)
< http://www.openspc2.org/seminar/hanabi/20090905/index.html >

ASCII.jpの連載もよろしく
・Illustrator×JavaScriptで百ます計算を自動生成
< http://ascii.jp/elem/000/000/455/455348/ >

再挑戦、三田紀房っぽいIT業界向けのセリフ。
「IT業界の人間は嘘つきである」
「Webの世界においてプロの世界とは金と人脈なのだ」
「勉強して…知識を蓄えてからWebデザイナーになるというのは、才能がないものの発する言葉だよ。サイトの制作なんてまわりの無能なものにやらせて必要な時だけ利用しピンハネする。これが真のWebデザイナーというもの」
「俗に…『IT業界は格好よさそうだ』というだろう…あれはね…大きな間違いなんだよ。3Kを遙かに超える7Kが本当のIT業界だ」
「IT業界の仕事は厳しいというが、これは大きな間違い。ITは自分がいかに楽な仕事をするか…さらに…いかに仕事をしないで済むかを考える業界だ。そのためには誰よりも早く『クリエイター手抜きプロジェクト』を読むことだ」

仮面ライダー ディケイドの後は仮面ライダーWですか……
その後、番組は多分、仮面ライダー バブル!! 世界経済を混乱させるやつらを倒すストーリーに違いない……。