
いつもお世話になっております。
初めて質問いたします。
Win XP で Illustrator CSを使用しております。
画像の特定の色の面積を測定したいと思っています。
例えば、http://www12.plala.or.jp/python357/test.gif
のような画像の色それぞれの面積です。
現在は、作成した画像をbmp形式で保存し、「画像から面積」という選択した色のピクセル数を数えるフリーソフトによって測定しています。
しかし、実際にはもっと複雑な形をしており、測定したい領域の数はもっと多いのです。(全て直線のパスで作成しており、ベジェ曲線はなし)
「画像から面積」でも時間をかければ測定することはできるのですが、境界部は色が混ざっており、正確な数値を得ることができません。
そこで、作成した任意のパスのアンカーポイイントから面積を測定し、その結果をテキストファイルに出力することは可能でしょうか?もし良い方法があれば教えていただけると幸いです。よろしくお願い致します。
スクリプトに関しては知識がないので、簡単なコメントをいただけると幸いです。
No.2ベストアンサー
- 回答日時:
文字コードの指定はよくわかりません。
たぶんできない...。各オブジェクトの面積を並べる場合、Illustrator上から書き出される順番(重なり順)がわかりづらいので、
名前をつけるようにしました。名前の“テキスト”も置くようにもしました。
レイヤ名も英数字に直すようにしました。
あとは好きなようにいじってください。
IllustratorのJavascriptのことは、"AIJavaScriptReference.pdf"を参照してください。
//outputFileは、書き出すテキストのパス。
var outputFile = new File("/C/Documents and Settings/ログイン名/デスクトップ/Output.csv");
outputFile.open("write");//テキストファイルを開く
var lays =activeDocument.layers;
var mm=2.8346456;//Illustratorの内部計算はポイントで行われる。mmに変換するための数値
outputFile.writeln("LayerName"+",1"+",2");//ヘッダ書き込み,後はドラッグする...。
for (var i=0 ; i <lays.length; i++){
if(lays[i].visible != true)continue;//非表示レイヤは無視
var str="";//初期化
var area_value=0;//初期化
var laynum=i+1;
lays[i].name="Layer "+laynum;//レイヤ名を英数字に変換
if (lays[i].pathItems.length==0)continue;//パスが無いレイヤは無視
for (var j=0 ; j < lays[i].pathItems.length; j++){
var obj=lays[i].pathItems[j];//オブジェクトを取得
/*オブジェクトに名前を付ける*/
obj.name=j+1;
/*オブジェクトの上に名前のテキストを置く*/
var textArt = lays[i].textFrames.add();
textArt.textRange.size = 6;//テキストサイズ
var xcod=obj.left+obj.width/2-textArt.width/2;
var ycod=obj.top-obj.height/2+textArt.height/2;
textArt.position = Array(xcod, ycod);//テキストの位置
textArt.contents =j+1;//テキストの内容
/*面積を求めてまとめる*/
area_value=obj.area;//1つのオブジェクトの面積
area_value=area_value/mm/mm;//square pointsで計算された値をミリ平方に変換
str+=","+area_value;//1行分のデータをまとめる
}
outputFile.writeln(lays[i].name+str);//書き込み
}
outputFile.close();//テキストファイルを閉じる
No.1
- 回答日時:
//outputFileは、書き出すテキストのパス。
var outputFile = new File("/C/Documents and Settings/ログイン名/My Documents/Output.txt");
outputFile.open("write");//テキストファイルを開く
var lays =app.activeDocument.layers;
var mm=2.8346456;//Illustratorの内部計算はポイントで行われる。mmに変換するための数値
var area_value=0;//初期化
for (var i=lays.length-1 ; i >=0 ; i--){
if (lays[i].pathItems.length==0)continue;
for (var j=0 ; j < lays[i].pathItems.length; j++){
var obj=lays[i].pathItems[j];
area_value+=obj.area;
}
area_value=area_value/mm/mm;//square pointsで計算された値をミリ平方に変換
outputFile.writeln(lays[i].name+"\t"+area_value);//書き込み
area_value=0;//次のレイヤのために初期化
}
outputFile.close();//テキストファイルを閉じる
Javascriptでやるとこんな感じ。
はじめに、outputFileのとこをご自分の環境に合わせて直してくださいね...。
Illustrator上で、色違いのオブジェクトを“レイヤごと”に分けてください。
パス以外のオブジェクトがあると正しく計算しません。
計算誤差が大きいのはIllustrator程度では仕方ありません...。
ポイントを変換してるし...Javascriptだし...。
(VectorWorksとかでやった方が精度は高くなりますよ。)
上をテキストファイルにコピペして適当な名前で保存します。
拡張子を .js にしてください。
スクリプトメニューから参照して実行してください。
よく使うなら、Illustratorフォルダ以下のスクリプトフォルダに入れておくと、
いつでもスクリプトメニューから使えます。
(C:\Program Files\Adobe\Illustrator CS\プリセット\スクリプト)
ちなみに、“選択図形”の合計面積を得たいだけなら以下を。
var objs = app.activeDocument.selection;
var mm=2.8346456;//Illustratorの内部計算はポイントで行われる。mmに変換するための数値
var area_value=0;
for(var i=0; i<objs.length; i++){
var obj=objs[i];
area_value+=obj.area;//面積を合計していく
}
area_value=area_value/mm/mm;//square pointsで計算された値をミリ平方に変換
var tx="面積 単位:平方ミリメートル";
prompt( tx, area_value );
参考URL:http://www.openspc2.org/book/IllustratorCS/
この回答への補足
ご回答ありがとうございます。
回答をいただき、いろいろ試行錯誤しておりました。
JavascriptはC言語と似た記述をするのですね。
参考URLも大変参考になります。
早速実行してみました。数値が出てきて感動しております。
確かに誤差はありますが、0.1%にも満たないようなので気になりません。
そこで、結果をエクセルに貼り付けやすいようにcsv形式での出力を試みたのですが、レイヤー名が日本語だと、文字コードがUTF-8Nになり、エクセルで開くと文字化けしてしまうようです。
テキストエディタで文字コードを変換して保存すれば解決するのですが、
文字コードを指定することはできるのでしょうか?
また、レイヤー内のパスそれぞれの面積を出力することができるようになりました。
そこで、レイヤー内のパスの面積を縦並びではなく横並びに出力したいと思っているのですが、どのように記述すればよろしいのでしょうか?
例えば、レイヤー1には3つのオブジェクト、レイヤー2には2つのオブジェクトがある場合、この様な感じの出力したいのです。
レイヤー1,***.***,***.***,***,***
レイヤー2,***.***,***.***
もしよろしければ、お時間のあるときに回答頂ければ幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Illustrator(イラストレーター) Illustrator アンカーポイント選択について 3 2023/01/30 12:31
- Illustrator(イラストレーター) ワードに貼った画像のキャンバスと画像本体のサイズの調整 2 2022/05/19 18:31
- 相続・譲渡・売却 境界確定、これは一般的なやり方ですか? 6 2023/01/24 22:10
- Visual Basic(VBA) PowerPoint VBA で画像の鮮明度を変更する方法がわかりません 2 2023/03/24 13:34
- フリーソフト アイコンとして保存アプリが不調 2 2022/04/16 06:39
- 電気工事士 6.6kVケーブル単芯325sq-1.5kmの遮蔽銅テープ抵抗値は何Ω? 1 2023/05/02 21:06
- YouTube ユーチューブへの動画投稿にサムネイルを付ける方法は? 1 2022/07/21 23:45
- その他(OS) Windowsで大量の画像サイズを半自動で変更する方法 6 2023/02/17 08:45
- 農学 植物の葉の面積って、植物が双葉だった場合、どちらかを測るんですか?それともどっちとも測りますか? ま 2 2022/08/20 20:46
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
このQ&Aを見た人はこんなQ&Aも見ています
-
初めて見た映画を教えてください!
初めて見た映画を覚えていますか?
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
AIツールの活用方法を教えて
みなさんは普段どのような場面でAIツール(ChatGPTなど)を活用していますか?
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
イラストレーターで、面積を出す事ができますか? ドットで出せるような事を聞きましたが、使った事もない
Illustrator(イラストレーター)
-
イラストレーターの面積を求める
Illustrator(イラストレーター)
-
イラストレーター10で面積を測りたい
画像編集・動画編集・音楽編集
-
-
4
イラストレータで面積算定
画像編集・動画編集・音楽編集
-
5
Photoshopを使った画像の面積の求め方について!
その他(ソフトウェア)
-
6
Illustratorの面積測定スクリプトが変な挙動をします
CAD・DTP
-
7
描いた図形の面積がわかるソフトウェア
その他(ソフトウェア)
-
8
画像から面積を求めるソフト
その他(ソフトウェア)
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Photohopの「ガイド」はコピー...
-
フォトショ、または、イラレで...
-
google earth pro をPCで使って...
-
jww レイヤーグループバーの「...
-
Illustratorで作成した画像の面...
-
formZから3dsmaxへデータを渡す...
-
Google Earthで写真マークを消...
-
グーグルアースで線がいっぱい...
-
マルチキャストが使えるスイッ...
-
写真の色を薄くする方法
-
G.CREW
-
APPLE iMacを使っているのです...
-
突然カーソルが手の形に…
-
クリッピングマスクの枠の外を...
-
エクセルで図形やワードアート...
-
エクセルの図形で弧を書く方法
-
in Designで一部のページにのみ...
-
指定範囲内で図形等を削除する...
-
JW 文字の後ろを白く着色したい
-
EXCEL 一部のオブジェクトだ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォトショ、または、イラレで...
-
Photohopの「ガイド」はコピー...
-
jww レイヤーグループバーの「...
-
google earth pro をPCで使って...
-
Illustratorで作成した画像の面...
-
photoshop でつなぎ目をなめら...
-
写真の色を薄くする方法
-
【Illustrator】ファイルを開い...
-
Google Earthで写真マークを消...
-
再質問です。グーグルアースで...
-
設計用語の意味を教えてください。
-
Illustratorの操作が難しいです...
-
G.CREW
-
Photoshopで画像の結合をするに...
-
マルチキャストが使えるスイッ...
-
Illustratorの面積測定スクリプ...
-
CiscoスイッチのROMモニタモー...
-
Vector Works グレー表示を濃く...
-
フォトショップエレメンツのツール
-
vectorworksでの印刷方法
おすすめ情報