クリエイター手抜きプロジェクト[428]Adobe Illustrator CS4〜CC 2014編 特定の条件でオーバープリントを解除する/古籏一浩

投稿:  著者:  読了時間:9分(本文:約4,100文字)



今回は、Illustratorでオーバープリントを解除するスクリプトです。オーバープリントなので、CMYKモードで作成されている前提で書きます。

Illustrator CS〜CS5では、一度でもオーバープリントにチェックを入れた図形を描くと、以後の図形すべてにオーバープリントが設定されてしまいます。

CS6以降では修正されていて、オーバープリントは解除された状態で新たな図形を描画できます。

・オーバープリント属性が自動的に設定される(Illustrator CS-CS5)
< http://helpx.adobe.com/jp/illustrator/kb/235839.html >

ということで、まずはすべての図形のオーバープリント(塗り・線)を解除するスクリプトです。




// 全ての図形のオーバープリント(塗り・線)をクリアする
(function(){
var count = 0;
var items = app.activeDocument.pageItems;
for(var j=0; j<items.length; j++){
var t = items[j].typename;
// 文字の場合は1文字単位で処理をする
if (t == "TextFrame"){
for(var i=0; i<items[j].characters.length; i++){
var f1 = items[j].characters[i].overprintFill;
var f2 = items[j].characters[i].overprintStroke;
items[j].characters[i].overprintFill = false;
items[j].characters[i].overprintStroke = false;
if (f1 || f2){ count = count + 1; }
}
}else{
var f1 = items[j].fillOverprint;
var f2 = items[j].strokeOverprint;
// 塗りのオーバープリントを解除
items[j].fillOverprint = false;
// 線のオーバープリントを解除
items[j].strokeOverprint = false;
if (f1 || f2){ count = count + 1; }
}
}
if (count > 0){
alert(count+"ヶ所のオーバープリントを解除しました");
}else{
alert("オーバープリントが設定されているものはありませんでした");
}
})();


次は選択された図形のオーバープリント(塗り・線)を解除するスクリプトです。


// 選択された図形のオーバープリント(塗り・線)をクリアする
(function(){
var count = 0;
var items = app.activeDocument.pageItems;
for(var j=0; j<items.length; j++){
var t = items[j].typename;
// 選択されていない場合は繰り返しの先頭に
if (!items[j].selected){ continue; }
// 文字の場合は1文字単位で処理をする
if (t == "TextFrame"){
for(var i=0; i<items[j].characters.length; i++){
var f1 = items[j].characters[i].overprintFill;
var f2 = items[j].characters[i].overprintStroke;
items[j].characters[i].overprintFill = false;
items[j].characters[i].overprintStroke = false;
if (f1 || f2){ count = count + 1; }
}
}else{
var f1 = items[j].fillOverprint;
var f2 = items[j].strokeOverprint;
// 塗りのオーバープリントを解除
items[j].fillOverprint = false;
// 線のオーバープリントを解除
items[j].strokeOverprint = false;
if (f1 || f2){ count = count + 1; }
}
}
if (count > 0){
alert(count+"ヶ所のオーバープリントを解除しました");
}else{
alert("オーバープリントが設定されているものはありませんでした");
}
})();


最後に線や塗りの色が完全な白の場合、
つまりCyan = Magenta = Yellow = Black = 0%
の場合のみオーバープリントを解除するスクリプトです。


// 全ての図形のオーバープリント(塗り・線)をCMYK=100%(白)ならクリアする
(function(){
var countFill = 0;
var countStroke = 0;
var items = app.activeDocument.pageItems;
for(var j=0; j<items.length; j++){
var t = items[j].typename;
// 文字の場合は1文字単位で処理をする
if (t == "TextFrame"){
for(var i=0; i<items[j].characters.length; i++){
var c = items[j].characters[i];
// 白100%なら塗りのオーバープリントを解除
if (checkWhite(c.fillColor) && c.overprintFill){
c.overprintFill = false;
countFill = countFill + 1;
}
// 白100%線のオーバープリントを解除
if (checkWhite(c.strokeColor) && c.overprintStroke){
c.overprintStroke = false;
countStroke = countStroke + 1;
}
}
}else{
// 白100%なら塗りのオーバープリントを解除
if (checkWhite(items[j].fillColor) && items[j].fillOverprint){
items[j].fillOverprint = false;
countFill = countFill + 1;
}
// 白100%線のオーバープリントを解除
if (checkWhite(items[j].strokeColor) && items[j].strokeOverprint){
items[j].strokeOverprint = false;
countStroke = countStroke + 1;
}
}
}
alert(countFill+"ヶ所の塗り、"+countStroke+"ヶ所の線のオーバープリントを解除しました");
// 白チェック。白ならtrue
function checkWhite(col){
if (!col){ return false; }
// カラーチェック。CMYK Color以外なら処理しない
if(col.toString() != "[CMYKColor]"){ return false; }
var c = col.cyan;
var m = col.magenta;
var y = col.yellow;
var k = col.black;
if ((c == 0) && (m == 0) && (y == 0) && (k == 0)){
//$.writeln(c+","+m+","+y+","+k);
return true; // 白色
}
return false;
}
})();


なぜかIllustratorでは、文字のオーバープリントのプロパティ名と、図形(パス)のオーバープリントのプロパティ名が違うというオチになっています。どうして、不統一なのか謎です。


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

ちなみにA社にプロパティ名で問い合わせたら、まあ修正とか変更とかはできないので、このままでみたいな回答でした。ちゃんと決めなかったのか、適当にやってしまったのかもしれません。適当にやった設計は後で泥沼になるので注意。

ただ、前の会社では設計は分からなくもないけど、製造ラインとして実際に動かしてみたら人間側の負担が高すぎて駄目だったというのはありました。ソフトウェアなら作り直しや修正できるけど、大型の製造ラインだともうどうしようもない。結局、次々と人がやめるというオチになってました。

地元には社長が自分でUNIXマシンでソフト作って、そういう製造とかのマシンを制御したり検査してるところもありますが(というのを30年前からやってるところが凄い)。

あと、先週のデジクリのGrowHairさんのネタは面白かったので、半年に一度くらいやってもらえるといいかも。

・Apple Watch (アップルウォッチ) 使い方辞典
< http://www.openspc2.org/reibun/AppleWatch/2015/ >

・Photoshop自動化基本編
< http://www.amazon.co.jp/dp/B00W952JQW/ >

・Illustrator自動化基本編
< http://www.amazon.co.jp/dp/B00R5MZ1PA >

・Adobe JavaScriptリファレンス
< http://www.amazon.co.jp/dp/B00FZEK6J6/ >

・ExtendScript Toolkit(ESTK)基本編
< http://www.amazon.co.jp/dp/B00JUBQKKY/ >

・データビジュアライゼーションのためのD3.js徹底入門
< http://www.amazon.co.jp/dp/4797368861 >

・4K/ハイビジョン映像素材集
< http://www.openspc2.org/HDTV/ >

・クリエイター手抜きプロジェクト
< http://www.openspc2.org/projectX/ >