終了

イラレのトレースで、カラーを透過がうまくいかない場合がある

積極的な参加者 ,
Jul 22, 2024 Jul 22, 2024

お世話になっております。

 

白地に黒いオブジェクトがある画像をトレースするのですが、

カラーを透過で白を選択しておけば、白部分はトレースしないという設定になるのですよね?

 

現状、カラーを透過で色を設定していないプリセットでやっているのですが、白部分はトレースしていません。

でもカラーを透過で色を設定していても、白部分をトレースしてしまうこともあります。

 

何が違うのでしょうか?

わかる方がいらっしゃったら教えていただきたいです。

キーワード
ツール , パフォーマンス
2.1K
翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Jul 22, 2024 Jul 22, 2024

ちっと整理させてください

 

画像トレース時の、画像トレースパネル下部の「カラーを透過」チェックについて

・チェックを無効にしても白の領域が含まれないことがある

・チェックを有効にしても白の領域が含まれることもある

でいいでしょうか。

 

以下どうでしょう?

・それぞれの元画像のカラーモード(RGB, CMYK, グレスケ, モノクロ2階調)わかりますか

・それぞれの元画像をPhotoshopで開いたとき、白の領域はほんとうの白でしょうか

・「カラーを透過」チェックを入れた際、カラーピッカーで背景色を拾ったでしょうか

 

あと、ベテラン投稿者さんには常にOSとAiのバージョンは意識をお願いしたいです 😇

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Jul 22, 2024 Jul 22, 2024

失礼いたしました。

 

macOS sonoma 14.5

イラレ 27.9.4

 

・チェックを無効にしても白の領域が含まれないことがある

・チェックを有効にしても白の領域が含まれることもある

これで合っております。

 

・元画像のカラーモードは必ずグレースケールです。

・白の領域はPhotoshop上ではC:0,M:0,Y:0,K:0の白でした。

・カラーを透過のチェックは背景色をひろったものではなく、チェックを入れると自動的に白になるのでそのままにしています。チェック入れただけです。

 

すみませんがお願いいたします。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Jul 22, 2024 Jul 22, 2024

ちなみに、前のバージョンで「ホワイトを無視」にチェックを入れて保存していたプリセットをそのまま使用しています。それを今のバージョンで使用したら、カラーの透過は有効になってなかったって感じです。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Jul 22, 2024 Jul 22, 2024

何度も後出しになってすみません。

 

「チェックを有効にしても白の領域が含まれる」に関してですが、

有効にしているプリセットを実行を組み込んでいるスクリプトでやると、白の領域が含まれてしまうということに気づきました。

 

もしかしたらスクリプトの問題もあるのかもしれません。。。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Jul 22, 2024 Jul 22, 2024

手作業と結果が異なるということであれば、スクリプト掲載してもらったほうがいいですね。

投稿フォームの </> を使ってみてください。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Jul 22, 2024 Jul 22, 2024
var sel = app.activeDocument.selection ; //選択オブジェクト
var tracePre = 'トレース'; //トレースプリセット名

(function(){
    if(sel.length != 1){alert('選択アイテムが一つではありません。一つだけ画像を選択してください。'); return;}
    
    t = sel[0].trace(); //トレース
    t.tracing.tracingOptions.loadFromPreset(tracePre); //トレースプリセット
    t.tracing.expandTracing();//拡張
})();

 

トレースプリセットではなく、

スクリプト上で色々設定してもダメみたいです。

 

var sel = app.activeDocument.selection; //選択オブジェクト

(function () {
    if (sel.length != 1) {
        alert('選択アイテムが一つではありません。一つだけ画像を選択してください。');
        return;
    }

    t = sel[0].trace(); //トレース
    t.tracing.tracingOptions.viewMode = ViewType.TRACINGVIEWVECTORTRACINGRESULT;
    t.tracing.tracingOptions.tracingMode = TracingModeType.TRACINGMODEBLACKANDWHITE;
    t.tracing.tracingOptions.threshold = 128;
    t.tracing.tracingOptions.pathFidelity = 75;
    t.tracing.tracingOptions.cornerFidelity = 75;
    t.tracing.tracingOptions.noiseFidelity = 10;
    t.tracing.tracingOptions.tracingMethod = TracingMethodType.TRACINGMETHODABUTTING;
    t.tracing.tracingOptions.fills = true;
    t.tracing.tracingOptions.strokes = false;
    t.tracing.tracingOptions.snapCurveToLines = false;
    t.tracing.tracingOptions.ignoreWhite = true;
    app.redraw();
    t.tracing.expandTracing();
})();

 

また上記のスクリプトについては、

イラレ 27.9.4だとホワイトを無視してくれましたが、イラレのバージョンが28.5になると使えなくなってしまいました。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Jul 22, 2024 Jul 22, 2024

v28.3でJavascriptから画像トレースを動かす際のカラーを透過について 

 

調べたらスクリプトだと動かないみたいですね・・・

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Sep 06, 2024 Sep 06, 2024

上記に書いたスクリプトの後、白のオブジェクトを削除することはできないかやってみました。

トレースする画像はグレースケールです。

 

sel = app.activeDocument.selection; //選択オブジェクト
items = sel[0].pageItems; //トレース後はグループアイテムになっているので選択オブジェクトの中のページアイテムを拾う

    for (var i = items.length - 1; i >= 0; i--) {//塗りがグレースケールで0のものを削除
        if (items[i].fillColor) {
            if (items[i].fillColor.typename === 'GrayColor') {
                if (items[i].fillColor.gray === 0)
                    items[i].remove();
                }
            }
        }
    }

 

これで削除できるものもあるのですが、同じような画像なのに削除できないものもありました。

画像のせいなのか、スクリプトのせいなのか分かりません。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Sep 08, 2024 Sep 08, 2024

>調べたらスクリプトだと動かないみたい

 

アクションで動くようなら可能性あるのですが…

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Sep 08, 2024 Sep 08, 2024

アクション経由でも、イラレ2024の場合はカラーを透過(白を無視)のオプションが外れてしまうようです・・・。

2023でどうにか誤魔化しています。。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Nov 14, 2024 Nov 14, 2024

↑でスクリプトでカラー透過が動かないと投稿した主です。

 

結局、最新バージョンでも修正される気配もなくバージョンアップできないのは業務上問題がでてしまうため私のほうでは白を消すというnekkonekoさんと同じ処理をスクリプトで作成して疑似対策としています。

 

nekkonekoさんのスクリプトとちょっと違うのはトレースが完了したグループに対して一旦パスファインダーで分解をかけた後にグループ内の「パス(pathItems)」と「複合パス(compoundPathItems)」を拾ってきてfillColorのRGBが200,200,200以上になってるものを削除するという手順になってます(グレースケールだとちょっと変える必要があるかも)。

 

参考になれば。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Nov 14, 2024 Nov 14, 2024

追記です。

こちらではトレース元の画像の関係でパスファインダーで分割や刈り込みが必要だったのですが元画像によってはこの処理は不要かもしれないです。

 

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Nov 28, 2024 Nov 28, 2024

ありがとうございます。

使用する画像に関してはパスファインダーが必要なかったのですが、グレースケールだとなかなか上手くいきませんでした。

 

削除したいパスアイテムを調べると、fillColorが「undefined」と表示されてしまうのです・・・。

IM-HIDEさんのようにRGBにしたら出来るのか試してみたいと思います。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Nov 28, 2024 Nov 28, 2024

いろいろ検証してみたのですが、グレースケールでもRGBでもCMYKでも、どちらにせよトレース後のオブジェクト内にfillColorが「undefined」になるものがあったり、例えばCMYKで「

fillColor.black === 0」のものをremove()しようとしても削除できませんでした。

 

var sel = app.activeDocument.selection[0];//選択オブジェクト
var items = sel.pageItems;//選択オブジェクト内のパス

var threshold = 200;

for (var i = items.length-1; i > 0; i--) {
    var color = items[i].fillColor;
    if (color.red > threshold && color.green > threshold && color.blue > threshold) {
        items[i].remove();
    }
}

 

 

RGBだとこうでしょうか?

これでは動かなかったのですが、何がおかしいでしょうか・・・

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Nov 29, 2024 Nov 29, 2024

こちらではfillColorがundefinedを返すことはありませんでした。

 

undefinedになるのは 

1.color.red,    color.black 等で取得した値が undefine

2.var color = items[i].fillColor;この時点でcolorにundefined

どちらになる感じですか?

 

1の場合はこちらでやってみた感じドキュメントのカラーモード(app.activeDocument.documentColorSpace)で取得するカラーとfillColorで数値を取得するカラー指定が違うとundefinedを返しましたが(ドキュメントがCMYKモードなのにcolor.redと指定するとundefinedになる等)


2の場合は alert( items[i] ) などで pathItemオブジェクト が返っているのか確認してもらったほうがいいかと。

※開発環境が不明なのでalertにしてますがログ取れるのであればそちらの方法で。
 
トレースプリセットの設定(方法、作成の箇所)の違いや読み込んでる画像の違い等あると思うのでアドバイスができるとすれば少し面倒ですがexpandTracing()で拡張したところで一旦スクリプトを終了させてトレース拡張されたグループの中身の構成を見てみたほうが良いかと思います。
基本<パス>と<複合パス>で構成されてると思いますがundefinedを返す要素を見つける感じで。
翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Nov 29, 2024 Nov 29, 2024

undefinedが出るのは、2の時です。

調べてみたら、どうやら複合パスのもののみundefinedが返っているようでした。

pathItemオブジェクトやcompoundPathItemオブジェクトはちゃんと返っているようですが、fillColorは複合パスだけundefinedです・・・。

 

その複合パスを解除して出来たパスにはfillcolorはあるようです。

複合パス自体にfillColorがないということなんでしょうか。

 

複合パスの場合だけ、複合パス内のパスの色を取得したらundefinedではなくなりましたが・・・これでやるしかなさそうです。。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Nov 30, 2024 Nov 30, 2024

複合パス(compoundPathItem)はそれ自体にfillColorは持たずにグループと同じ様に配列になっています。

コード提供したいところですが現在コードがわからないので私のやってる処理の手順を。

注)画像を配置してトレース拡張までして結果としてグループが1つだけが前提としてます。

  トレース以外のものがある等の場合適時読み替えてください。


1.全体を選択  -  app.executeMenuCommand('selectall');

  ※通常であればここで1つのグループが選択されてるはずです。

2.グループ内のパス配列[ pathItems ]をデクリメントループしていく

  2_1.パス「pathItems[i]」のfillColorを取得させ希望の数値のものを条件作成(if等)してパス削除

3.グループ内の複合パスの配列[ compoundPathItems ]をデクリメントループしていく

  3_1.複合パス内「compoundPathItems[j]」のパスの配列[ pathItems ]をデクリメントループしていく

    3_1_1.パス「pathItems[k]」のfillColorを取得させ希望の数値のものを条件作成(if等)してパス削除

 

リストのインデントが下がってるものはループ内処理です。

i,j,k はループのカウンタ変数です。

 

これで伝わりますか。。。?

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Dec 01, 2024 Dec 01, 2024
最新

教えていただきありがとうございます!伝わりました!

 

グループ内のpageItems内でループして、typenamePathItemだったら・・みたいな条件作成でしていましたが、普通にpathItemsとcompoundPathItemsそれぞれでループしたらよかったのですね。

遠回りしていました・・・!

それで再度作ってみます。わざわざありがとうございました!

 

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines