グラフィック枠から画像がはみだしている(トリミングされている)かどうかのチェック方法

[7638]グラフィック枠から画像がはみだしている(トリミングされている)かどうかのチェック方法 投稿者:たかし 投稿日:2013/07/03 15:47:41
初投稿させていただきます。

Win7 InDesign CS6の環境です。

先日、InDesignドキュメントのグラフィック枠に挿入した画像の一部が枠に収まっておらず、画像が欠けてしまうという事故が起こりました。もともとは枠に収まっていたのが、後から更新した画像が少し幅が大きくてはみ出てしまったようです。

そこで、InDesignにて画像がグラフィック枠に収まっておらずトリミングされている箇所を検出する方法がないかお聞きしたいと思い、投稿させていただきました。

テキストオーバーセットを検出するプリフライトはありますが、画像のはみだしについては項目ありません。
(意図的にトリミングする場合もありますからね)

オブジェクト検索/置換を利用しようとも思いましたが、トリミングの数値をきっちり指定しなければならず、「上下左右いずれかが0.1mm以上」などという条件での検索はできないようです。

みなさまのお知恵をお借りできましたら幸いです。
よろしくお願いいたします。
DocumentsのLinks全部辿って
親になる枠の座標値で計算して、
怪しいところをselectするScriptを作って
保存・プリント・書き出しのイベントハンドラに
仕立てるのが良いと思います。
話の流れ的に、たぶんイラストですよね…
画像なら何とか。

myItem = app.activeDocument.pageItems;
for (i=0; i<myItem.length; i++) {
if (myItem[i].contentType == 1735553140 & myItem[i].allGraphics.length > 0){
X = myItem[i].visibleBounds[3]-myItem[i].visibleBounds[1];
Y = myItem[i].visibleBounds[2]-myItem[i].visibleBounds[0];
try{
tmpObj = myItem[i].images[0];
if (X<(tmpObj.visibleBounds[3]-tmpObj.visibleBounds[1]) || Y<(tmpObj.visibleBounds[2]-tmpObj.visibleBounds[0])){
myItem[i].select();
alert("注意!");
}
} catch(e){
tmpObj = myItem[i].epss[0];
try{
if (X<(tmpObj.visibleBounds[3]-tmpObj.visibleBounds[1]) || Y<(tmpObj.visibleBounds[2]-tmpObj.visibleBounds[0])){
myItem[i].select();
alert("注意!");
}
} catch(e){
myItem[i].select();
alert("イラストは別途確認してください");
}
}
}
}

しばらくスクリプトを作ってなかったのでリハビリがてら作ってみましたが、かなりダメダメです。
枠サイズより中のサイズが大きいものに注意を出します。
が、回転してる画像とか、角丸になってるとか、そんなのがあると全然ダメだと思います。
こんなのしか作れなくて申し訳ないです…
流星光輝さま
dotさま

早速ご返信いただきありがとうございます。

やはりスクリプトでの処理になりますよね。
dotさまのスクリプト試してみました。わざわざ書いていただき恐縮です…。申し訳ないとかとんでもないです。

概ね検出してくれましたが、グラフィックフレームが中の画像より大きく、画像が上下左右どこか少しだけ枠からはみだして欠けている、というケースは検出外でした。
まあそんなケースはあまりないかと思います。

いずれにせよ、教えていただいたスクリプトをベースにいろいろ試してみたいと考えております。
この度はレス大変感謝です。ありがとうございました。
提示された条件だけですと、紙面によってはほとんどの画像にヒットしてしまうかも知れませんね。
たとえば、トリミングしてはいけない画像フレームに特定のオブジェクトスタイルを設定しておくとか、特定のレイヤー上に置いておくとか…
こういった条件をプラスしておいて、その上でスクリプトで座標値なりトリミングの数値で探して、確認ダイアログを出し、フレームを画像にフィットするか画像をフレームにフィットするか選ぶ、といった処理をすれば良いのではないでしょうか。
スクリプトで済ますのであれば、
「フレームをコンテンツに合わせる」の前後でgeometricBoundsを取得して値を比較してundo()するのが乱暴だけど簡単で(作るのが)早いです。
いろいろ勉強になります。
日々精進が必要ですね…
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)