お世話になります。
特色の色合い(tint)をJavaScriptで取得する方法を探しています。
キャンバスに特色で文字を書いただけのデータを使い、
下記コードを実行してみましたが、
「Error21:undefinedがオブジェクトではありません」というエラーになりました。
alert(activeDocument.pageItems[0].fillColor.spot.color.tint);
どうすればJavaScriptでtintの値が取得できるでしょうか?
ご返答よろしくお願いいたします。
[13303] 森野クマ (2011/12/09 Fri 09:46)
色合い……色合い。
alert(activeDocument.pageItems[0].fillColor.colorValue);
でCMYK成分がみられます。配列オブジェクトです。
alert(activeDocument.pageItems[0].fillColor.fillTint;
で濃淡がみられます。ただし100%の時は「-1」になります。
[13305] (z-) (2011/12/09 Fri 12:36) web
すみません、tintを翻訳したら色合いとでてきたので、
違和感を感じつつも他の訳を知らないので色合いと書きました。
で、上記スクリプトを実行しましたが、同じエラーが返されます……。
alert(activeDocument.pageItems[0].fillTint);
と書き換えると、エラーはなくなりましたが、undefinedと表示されました。
[13306] 森野クマ (2011/12/09 Fri 13:39)
> alert(activeDocument.pageItems[0].fillTint);
> と書き換えると、エラーはなくなりましたが、undefinedと表示されました。
pageItems[0] が何者なのか、こちらは知りっこないのでエラー回避などしていません。
「塗りカラー」のある選択範囲で試してみてください。グループオブジェクトとかダメですよ。
それと、お使いのバージョンがわかりません。
CS〜CS4あたりはactiveDocumentではなくapp.activeDocumentとしないとInDesign様に伝わらないはず。
[13307] (z-) (2011/12/09 Fri 15:41) web
あ、確かにpageItems[0].fillColor.fillTint は無駄でした。これでも出るっちゃ出ますが。。
alert(activeDocument); で[Document]と出なければ
app.activeDocument に置換し、ついでに
alert(activeDocument.pageItems[0]); で何が出るか確認してみて下さい。
どのクラスでプロパティがundefinedになっているのか追ってみて下さい。
[13308] (z-) (2011/12/09 Fri 15:48) web
ご返答ありがとうございます。
ILのバージョンはCS5.5です。
また、新規ドキュメントにテキストを一つしか置いていませんので、
alert(activeDocument.pageItems[0]);
では「TextFrame」が出てきます。
すみません、もっと詳しくスクリプト書けばよかったですね。
前回の質問からも続いてる問題でして、
今、白ノセのオーバープリントの検出をしようとしています。
で、下記スクリプトができました。
ちなみにアピアランスに複数の色がある場合がまだ無理です。
あとは「特色でtiltが0%の時のオーバープリントを解除」できれば、
ある程度使えるものになると考えています。
doc = activeDocument;
count = 0;
for (i=0; i<doc.pageItems.length; i++)
{
if(doc.pageItems[i].typename == "PathItem")
{
fc = doc.pageItems[i].fillColor;
if((fc.cyan == 0 && fc.magenta == 0
&& fc.yellow == 0 && fc.black == 0)
|| fc.gray == 0)
{
if(doc.pageItems[i].fillOverprint == true)
{ doc.pageItems[i].fillOverprint = false; count++; }
}
}
else if(doc.pageItems[i].typename == "TextFrame")
{
if(doc.pageItems[i].contents.length > 0)
{
fc = doc.pageItems[i].textRange.fillColor;
if((fc.cyan == 0 && fc.magenta == 0
&& fc.yellow == 0 && fc.black == 0)
|| fc.gray == 0)
{
if(doc.pageItems[i].textRange.overprintFill == true)
{ doc.pageItems[i].textRange.overprintFill = false; count++; }
}
}
}
}
alert( count + "個の修正を完了しました。");
[13309] 森野クマ (2011/12/09 Fri 16:35)
>ILのバージョンはCS5.5
あ…思い出した orz
すいません、頭っからInDesignだと思い込んでレスしてました。またしても。
この件はお互い学習しましょう w
白のオブジェクト限定ということなら、もうすぐできそうですね。楽しみです。
アピアランスもですが、グループオブジェクトはどうなりますかね。
[13310] (z-) (2011/12/09 Fri 17:40) web
ご返答ありがとうございます。
すみません、Illustratorの略称はAIでしたね……
紛らわしい書き方してしまいました。
グループ化については問題なく内部まで判別しています。
例えばテキストをアウトライン化しても全部の文字からきちんと
オーバープリントを取れるようになりました。
残すは特色……さらなる賢者の登場をお待ちしております。
[13311] 森野クマ (2011/12/09 Fri 17:55)
> すみません、Illustratorの略称はAIでしたね……
> 紛らわしい書き方してしまいました。
じゃーなくて、
最初に、
アプリと
バージョンを
明記すべき、
というニュアンス
のつもり
だったのですが。。
pageItems[i].fillColor.tint で出るみたいです。ESTKをうまく使いましょう。
[13312] (z-) (2011/12/09 Fri 18:15) web
すみません、AIとIDではスクリプトが違うことは知っていましたが、
バージョンでもそこまで違うとは知りませんでした。
大抵のスクリプトは下位互換がありますので、
大して影響のあることとも思っていませんでした。
今後気を付けます。
> pageItems[i].fillColor.tint で出るみたいです。
何個か前の返信でも書きましたが、これでは出ませんでした。
> ESTKをうまく使いましょう。
これの存在をすっかり忘れていました……。
ちょっと研究してみます。
ご返答ありがとうございました。
[13318] 森野クマ (2011/12/12 Mon 16:05)
> > pageItems[i].fillColor.tint で出るみたいです。
> 何個か前の返信でも書きましたが、これでは出ませんでした。
ん 手元で試したところ、CS3では出ます(CS3)。
上位バージョンはいま試せないのでナントモですが、大差ないと思われます。
ESTKの話になりますが、例えば、ターゲットのシンプルなオブジェクトだけを選択した状態で
app.activeDocument.selection[0].fillColor.tint;
$.bp();
を実行してみて下さい。処理は2行目で停止して、データブラウザ内で変数「a」の内容が確認できます。
そこから目的のプロパティまで辿ってってみて下さい。
まず1個で試してみる事です。
[13320] (z-) (2011/12/12 Mon 16:40) web
まちがいた orz
> app.activeDocument.selection[0].fillColor.tint;
> $.bp();
a=app.activeDocument.selection[0];
$.bp()
でお試しを。失礼。。
[13321] (z-) (2011/12/12 Mon 16:41) web
たびたびのご返答ありがとうございます。
ご助言いただいた内容を参考にし、さらにESTKを使って調べましたところ、
ついに答えがわかりました!
alert(app.activeDocument.pageItems[0].textRange.fillColor.tint);
これでtintが表示されました。
本当にありがとうございました。
これで先に進めます!
[13322] 森野クマ (2011/12/12 Mon 17:52)
あー、どっからtextRangeが湧いて出たやら、と思ったら
↓すっかり見落としてましたすいません。うっかりですいません。
>キャンバスに特色で文字を書いただけのデータを使い、
>下記コードを実行してみました
[13324] (z-) (2011/12/12 Mon 22:57) web
> あー、どっからtextRangeが湧いて出たやら、と思ったら
> ↓すっかり見落としてましたすいません。うっかりですいません。
> >キャンバスに特色で文字を書いただけのデータを使い、
> >下記コードを実行してみました
いえ、とんでもありません。
おかげさまで多大なるヒントをいただけました。
本当にありがとうございました。
このJavaScriptは未完成ながらも、
デザイナー陣にはなかなか好評なようです。
ですので改良の余地はあるものの、
ひとまずはこれでいったん閉めさせていただきます。
ありがとうございました。
[13326] 森野クマ (2011/12/13 Tue 10:20)
> このJavaScriptは未完成ながらも、
> デザイナー陣にはなかなか好評なようです。
> ですので改良の余地はあるものの、
> ひとまずはこれでいったん閉めさせていただきます。
締めとして、一旦まとまったそのコードをここに公開して頂くとよろしいかと ^
[13327] (z-) (2011/12/13 Tue 10:53) web
> 締めとして、一旦まとまったそのコードをここに公開して頂くとよろしいかと ^
あ、そうですね、では最終バージョンをこちらに。
doc = app.activeDocument;
count = 0;
for (i=0; i<doc.pageItems.length; i++)
{
if(doc.pageItems[i].typename == "PathItem")
{
fc = doc.pageItems[i].fillColor;
if((fc.cyan == 0 && fc.magenta == 0
&& fc.yellow == 0 && fc.black == 0)
|| fc.gray == 0)
{ doc.pageItems[i].fillOverprint = false; count++; }
}
else if(doc.pageItems[i].typename == "TextFrame")
{
if(doc.pageItems[i].contents.length > 0)
{
fc = doc.pageItems[i].textRange.fillColor;
if((fc.cyan == 0 && fc.magenta == 0
&& fc.yellow == 0 && fc.black == 0)
|| fc.gray == 0)
{ doc.pageItems[i].textRange.overprintFill = false; count++; }
else if(doc.pageItems[i].textRange.fillColor.tint == 0)
{ doc.pageItems[i].textRange.overprintFill = false; count++; }
}
}
}
alert( count + "個の修正を完了しました。");
[13328] 森野クマ (2011/12/13 Tue 15:09)
書き込んだあとで気づきました。
「特色のオブジェクトの白ノセを解除してない」
ということに……。
ってことでそれもできるように付け加えました。
こっちが本当の最終バージョン。
------------------------------------------
doc = app.activeDocument;
count = 0;
for (i=0; i<doc.pageItems.length; i++)
{
if(doc.pageItems[i].typename == "PathItem")
{
fc = doc.pageItems[i].fillColor;
if((fc.cyan == 0 && fc.magenta == 0
&& fc.yellow == 0 && fc.black == 0)
|| fc.gray == 0)
{ doc.pageItems[i].fillOverprint = false; count++; }
else if(doc.pageItems[i].fillColor.tint == 0)
{ doc.pageItems[i].fillOverprint = false; count++; }
}
else if(doc.pageItems[i].typename == "TextFrame")
{
if(doc.pageItems[i].contents.length > 0)
{
fc = doc.pageItems[i].textRange.fillColor;
if((fc.cyan == 0 && fc.magenta == 0
&& fc.yellow == 0 && fc.black == 0)
|| fc.gray == 0)
{ doc.pageItems[i].textRange.overprintFill = false; count++; }
else if(doc.pageItems[i].textRange.fillColor.tint == 0)
{ doc.pageItems[i].textRange.overprintFill = false; count++; }
}
}
}
alert( count + "個の修正を完了しました。");
[13329] 森野クマ (2011/12/13 Tue 15:18) web
> 残すは特色……さらなる賢者の登場をお待ちしております。
ばかじゃないのか?
賢者にはお金はいらないとでも?
アピアランスをjavascriptでどうこうはできないから、
お金払ってどこかでプラグインでもかいてもらえば〜
[13313] うんこ (2011/12/11 Sun 10:43)
情報提供者をばかにしてますね。
御礼もないようですし・・・
[13315] 疲れるね (2011/12/12 Mon 12:15)
> 情報提供者をばかにしてますね。
私自身が「情報提供者」のつもりなのですし、ここは「情報提供者同士の互助会」であって、あなたのように罵倒しかできない人が罵倒する場所ではないと思いますが。
現に私は「CMYKまたはグレースケールにおける白ノセのオーバープリントを解除するScript」のコードを公開しています。これはmacintosh版ではスクリプトが存在するようですが、JavaScript版は探しても見つからなかったので、「情報提供者として」ここで公開し、さらなる改良をすべく質問させていただいています。もしそのようなスクリプトがすでに無料で存在しているのであれば、ぜひ教えてください。
一切有用な情報を提供しない人から、例え完成していないとはいえ、一切見返りを求めず、Illustratorの環境を改良しようとしている人に対して罵倒していい権利などないはずです。馬鹿にしているのは、あなたの方です。
[13319] 森野クマ (2011/12/12 Mon 16:12)
誰にも頼まれてないのに勝手にクソコードさらして身勝手に改良の方法を求めたあげく、私のやっていることはみんなの役に立つことだと信じているので、それを冒涜する権利はあなたがたにはない!
って、確信犯だな。
「一切有用な情報を提供しない人から罵倒していい権利などないはずです」って、情報を提供することが、いつから義務化されたんだよ。
相変わらず、こういう勘違いした脳みそが増殖しつづけてるな。
はっきりと言うが、権利があるからおまえを罵倒?してるんじゃない。
単純に、冷静に、社会通念に照らし合わせてみて、おまえの態度が無礼極まりないから怒ってるんだよ、上の人たちは。
そんなことも分からない馬鹿が、「ぼくちゃんすごいんです、スクリプト書けちゃうんです」ってマヌケ面して自己顕示する場所じゃないんだよ、ここは。
まぁ、この書き込みも消されるだろうけどな。
DTP書き込み寺に多くを求めるのは酷だってことは分かってるよ。
[13353] るんるん♪ (2011/12/26 Mon 09:32)