選択した画像やパスの横幅と縦幅を正確に指定する (Illustrator 10〜CS4編)

Illustratorでは図形を描く時に正確なサイズを指定することができます。また、一度描いてしまった図形でも正確に位置や幅を変更することができます。しかし、複数の図形を同じ横幅、縦幅にしようとすると、1つずつ図形を選択してから幅を入力しなければいけません。複数の図形を選択してしまうと、その複数図形を囲む幅、つまり全体で指定した幅で設定されてしまうためです。
このような場合にはスクリプトを使った方が手軽な場合があります。特に、画像だけ、テキストだけ、パスだけといった条件を指定することができるのが便利なところです。
今回紹介しているスクリプトは、あらかじめ幅を変更する図形や画像を複数選択してから実行してください。
まず、最初のスクリプトは選択した図形を横幅100、縦幅80ポイントにするものです。

w = 100;
h = 80;
selObj = activeDocument.selection;
for (i=0; i<selObj.length; i++)
{
selObj[i].width = w;
selObj[i].height = h;
}

幅を変更するには

w = 100;
h = 80;

の数値を変えてください。単位はポイント(pt)です。
選択したものがテキストやパスなどが混在してしまい複雑なレイアウトになっている場合、特定の図形だけを選択するのが難しい場合があります。そのような場合は以下のスクリプトを使います。以下のスクリプトは選択されたものの中で配置された画像だけを処理対象とします。

w = 100;
h = 80;
selObj = activeDocument.selection;
for (i=0; i<selObj.length; i++)
{
if(selObj[i].typename == "RasterItem")
{
selObj[i].width = w;
selObj[i].height = h;
}
}

場合によっては幅が指定したものより大きい場合のみ小さくしたいことがあります。そのような場合には以下のスクリプトを使います。これは指定した幅よりも、大きい場合のみ幅を変更します。

w = 100;
h = 80;
selObj = activeDocument.selection;
for (i=0; i<selObj.length; i++)
{
if(selObj[i].typename == "RasterItem")
{
if (selObj[i].width > w)
{
selObj[i].width = w;
}
if (selObj[i].height > h)
{
selObj[i].height = h;
}
}
}

横幅や縦幅を変えるのにスクリプトを修正するのが面倒な場合にはprompt()を使って実行時に幅を指定する以下のスクリプトを使います。ただし、このスクリプトはIllustrator CS2以降でのみ動作します。

w = eval(prompt("横の最大幅を入れてください", 100));
h = eval(prompt("縦の最大幅を入れてください", 80));
selObj = activeDocument.selection;
for (i=0; i<selObj.length; i++)
{
if(selObj[i].typename == "RasterItem")
{
if (selObj[i].width > w)
{
selObj[i].width = w;
}
if (selObj[i].height > h)
{
selObj[i].height = h;
}
}
}

これらのスクリプトは画像だけを対象にしていますが、逆に画像以外を対象にする場合には

if(selObj[i].typename == "RasterItem")

if(selObj[i].typename != "RasterItem")

に変更してください。なお、リンクされた画像の場合はRasterItemでなくPlacedItemという名前になるので必要に応じて変更してください。
また、パスだけを操作対象にする場合には

if(selObj[i].typename == "RasterItem")

if(selObj[i].typename == "PathItem")

にします。文字であれば以下のようになります。

if(selObj[i].typename == "TextFrame")

シンボルの場合は以下のようになります。

if(selObj[i].typename == "PluginItem")

 

[サンプルをダウンロード]