ExtendScript用OpenCVラッパー

基本的にNoReferenceでのご提供でございます。

こちらは/Library/Framework/に投入。
https://drive.google.com/open?id=1g9yBguBj61pEcO_tTWcNe41tkYllRc3C

以下を解凍すると必要なものが揃っています。
https://drive.google.com/open?id=1me95GKDUjn0BI3nIXsyCYkp6p8s_XPOU
全部同じ階層においておけば動作可能。Frameworkはユニバーサル構成ですから32bitのESTKからも実行可能。ExternalObjectをコールして帰ってくるのは顔のバウンズです。とりあえずjsxファイルの構成を確認してご利用ください。

恐らくOSX10.9以降なら動作するとおもわれます。

広告

ExtendScriptにおけるDRMの実装

今回は完全にExtendScriptをベースとするデベロッパー向けの内容になります。わたしたちデベロッパーも開発には環境整備から始まりコードを書く時間までそれ相応のコストを負担しています。例えばQR Code Makerでは開発の予備調査からリリースまで20ヶ月近く要し、延べ時間は200時間を余裕で超えるわけです。人月で計算するとわたしが個人で負担したコストは150万円超となります。これは極端な例ですが、ちょっとしたフリースクリプトを配布している方々も大なり小なりコストを負担しています。本来、ある程度の品質を担保する必要がある場合は当然の如く有料化を視野に入れなければならない事なのです。
そこで問題になるのがユーザー認証やコピープロテクション等のDRM関連の技術です。ExtendScriptでは元来こう言った物に対しては考えられてはいません。(jsxbinはコードの隠蔽には有効だがコピーに対しては保護とはならない)しかし、比較的手間のかからない手法で出来ることも幾つか存在します。
今回は基礎的な手法から高度な実装の概要までを紹介します。

続きを読む

YahooAPIを利用してルビを振るやつ

だいたい8年ぐらい前にやったネタなんですけど、未だに動きます。ここはYahooさんに感謝したいところです。
そんなに長いコードではありませんが、44行目だけ自分でYahooAIPに登録してふりがなAPIを利用するためのアプリケーションIDというのを取得して設定しなければならない仕様になっています。詳しくは以下をご参照ください。

https://developer.yahoo.co.jp/webapi/jlp/

ExtendScriptでのソケット通信のお手本みたいな構成になっていますので、そこら辺の事を重点的に見ていただくと勉強になるかもしれません。
もちろん、総ルビとかで息絶え絶えになりそうなときなんかに役に立ちます。コード自体は以下から取ってきてください。

https://github.com/ten-A/Extend_Script_experimentals/blob/master/group_ruby.jsx

繰り返しになりますが、YahooAPIのアプリケーションIDを書き換えないと動かないのでそこらへんの事にご注意ください。
ちなみに、わたし自身はこれで総ルビ振った後にMonoRubyエクステンションで手を加えていくようなワークフローで処理しています。(^-^)/

 

 

[PS] Scriptをプラグインのふりさせる

今年も野菜の季節が来ました。お庭ではトマトときゅうり、ゴーヤの苗の植え付けが完了しています。アスパラガスも絶好調で毎日食卓に上がるという状況です。ここ数日は雨や冷え込んだりですが、そろそろ害虫の対処を考えないといけないなあと思いつつ仕事をしている次第です。また、ここ2〜3年で急に大きくなった檸檬の木もいっぱい花をつけました。今年も100個以上の収穫になりそうです(どうする???)。という事でわたしからの報告は以上です。

……というわけにもいかないので続けます。以前からPhotoshopにはJavaScriptをプラグインとして登録する手があるのは知ってたのですが特に需要も無いので自身でどうこうする事はなかったのですけど、ちょっと調べ物のついでに検索かけてみたら、この辺について言及しているページが見当たらないと言うことで書きなぐっておこうと思います。

続きを読む

[AI]回転された配置画像の縮尺を計算するスクリプト

これ、この前詰まってた数学的な問題を解消できたやつです。
元ネタはいつものごとくフォーラムです。
https://forums.adobe.com/thread/2455224
して、コードはこちら

var tg = app.selection[0];
var mx = tg.matrix;
var deg = Math.atan2(mx.mValueB, mx.mValueA) * 180 / Math.PI;
var nm = new Matrix;
nm.mValueA = nm.mValueD = 1;
nm.mValueB = nm.mValueC = 0;
var rtmx = app.concatenateRotationMatrix(nm, deg);
var sc = mx.mValueA / rtmx.mValueA;
alert(sc*100);

選択した画像の縮尺を計算します。(^-^)/

[AI]アフィン変換の活用[AI]

アフィン変換の活用Illustratorはいくつかのオブジェクトがmatrixプロパティを持ちます。そして、appクラスには各種matrix操作メソッドがあり、それを利用することによって色々と出来ることがあります。例えば、

スクリーンショット 2018-02-21 12.31.58

こちらのようにinverseMatrixを利用して回転角・縮尺をリセットするような操作が可能です。もっと単純に処理できるのはテキストオブジェクトでスケール等の情報が全て級数や長平体に移行されるためmatrixが回転角のみとなります。その為matrixの一部の数値からasinを利用して回転角を計算することが可能です。

var m = app.selection[0].matrix;
alert(-Math.asin(m.mValueC)/Math.PI*180);

メソッドが返すのはラジアンですから上の様にdgreeに変換する必要があります。とまあ、こんな感じで上手く使うと非常に便利なアフィン変換のマトリクスですが、なんだかなぁ〜って思っている方に以下のブツをおすすめします。

var $_affine={
var $_affine={
 win:function(){
 var w = new Window ('dialog', "affine matrix", undefined);
 var p1 = w.add('panel',undefined,"a"); p1.size = [100,45];
 var tx1 = p1.add('edittext',undefined,'1',{multiline:false});
 tx1.characters = 5;
 var p2 = w.add('panel',undefined,"b");
 p2.size = [100,45];
 var tx2 = p2.add('edittext',undefined,'0',{multiline:false});
 tx2.characters = 5;
 var p3 = w.add('panel',undefined,"c");
 p3.size = [100,45];
 var tx3 = p3.add('edittext',undefined,'0',{multiline:false});
 tx3.characters = 5;
 var p4 = w.add('panel',undefined,"d");
 p4.size = [100,45];
 var tx4 = p4.add('edittext',undefined,'1',{multiline:false});
 tx4.characters = 5;
 var cl = w.add('button', undefined, 'cancel', {name:'cancel'});
 var bt = w.add('button', undefined , 'apply', {name:'ok'});
 bt.onClick = function (){
 $_affine.applyTransform(tx1.text,tx2.text,tx3.text,tx4.text);
 } w.show();
 },
 applyTransform:function(a,b,c,d){
 var tm = new Matrix();
 tm.mValueA = Number(a);
 tm.mValueB = Number(b);
 tm.mValueC = Number(c);
 tm.mValueD = Number(d);
 tm.mValueTX = 0;
 tm.mValueTY = 0;
 //alert(tm.mValueA+tm.mValueB+tm.mValueC+tm.mValueD);
 app.selection[0].transform(tm,true,true,true,true,1);
 app.redraw();
 }
 }
$_affine.win();

スクリーンショット 2018-02-21 12.40.07
ScriptUIで各パラメータを入力して選択したオブジェクトを回したり拡大したりと試せるようになっています。一度使ってみてください。

新しい所でブログ書いています。

皆様、いかがお過ごしでしょうか。年度末も近づき多忙な日々をお過ごしになっている方も多いかと存じます。

わたしもこの所、ろくに記事を書いておりませんが忙しいとか何とかではありません。別な所で書いているだけです。

アプリケーション自動化総合コミュニティフォーラム (Japan)

こちらのAdobe社公式フォーラムの「アプリケーション自動化総合コミュニティフォーラム(Japan)」ですが、Blogインターフェースを増設してもらいました。という事で基本的な物とか、広く一般に周知したいような内容はそちらに書きます。もちろん、こちらも放置する訳ではなくて、ニッチなものから高度な内容に関しては引き続き殴り書きする予定です。双方ともご愛顧頂けますようお願い申し上げます。

もちろん、ExtendScriptとかAppleScript等、自動処理関連でお困りの節は前述のフォーラムで質問して下さい。アプリケーションは問いません。手捏ね引いて待っています(^-^)/