こんにちは、PNGをピンと呼ぶなんて知らなかった生焼けです。ズットピーエヌジーッテヨンデタ…
今回はIllustratorのスクリプトで300dpiでPNGを書き出す方法を解説します。
PNGを書き出すスクリプト
解説はいいやという方は、下のスクリプトをコピーしてご使用ください。
それぞれの設定の解説については次の章で解説しています。
スクリプト
このスクリプトを実行すると、
- 現在開いているAIファイルと同じ場所に同じファイル名
- アクティブなアートボードのサイズ×300÷72のサイズで(300dpiの設定の場合)
- 何もオブジェクトがない場所は透過
- 解像度300dpiのPNG
が書き出されます
保存先に同じ名前のファイルがあると、その上から保存されるので、注意が必要です。
// pngの書き出しを設定する(デフォルト設定)[設定できる範囲や仕方など]
var pngOpt = new ImageCaptureOptions();
// 解像度(150)[72.0-2400.0]
pngOpt.resolution = 300;
// アンチエイリアス(false)
pngOpt.antiAliasing = true;
// 透過設定(false)
pngOpt.transparency = true;
// pngOpt.matte = false;
// 保存する場所と名前を設定する
var fRef =app.activeDocument;
// 現在のファイルの名前を抽出し、拡張子をpngに変える
var myname = fRef.name;
var newname = myname.replace(/\.ai/g,".png");
// 現在のファイルの場所を取得し、フルパスを作成する
var mypath = fRef.path;
var newpath = mypath+"/"+newname;
// 保存する範囲を指定するためにアートボードの大きさを取得
var rect = fRef.artboards[0].artboardRect;
// 書き出しを実行
saveFile = new File(newpath);
activeDocument.imageCapture(saveFile, rect, pngOpt);
- Windows10・Illustrator2021版で動作確認済みです。
- 環境によってはエラーなどがあるかもしれないので、初めて使う際はファイルを別名保存などしてからお使いください。
- ファイルの破損などの責任は負いかねますので、ご了承ください。
スクリプトの入れ方についてはこちらで解説しています。
PNG書き出し設定についての解説
pngを書き出す際の設定について詳しく解説していきます。
PNG書き出し設定
var pngOpt = new ImageCaptureOptions();
まず、「new ImageCaptureOptions()」で書き出すための設定を入れる箱のようなものを作成します。
「pngOpt = new ImageCaptureOptions()」とすることで、この箱を「pngOpt」という名前で扱います。
もちろん「pngOpt」でなくてもわかりやすい名前に変更しても大丈夫ですが、その場合は「pngOpt」の部分を全て書き換える必要があることに注意してください。
解像度の設定[72.0-2400.0] デフォルト:150
pngOpt.resolution = 300;
解像度を72.0-2400.0の間の数字で設定できます。
ただ、この解像度によって、書き出されるサイズが変更されます。主に使用される72/150/300を例にあげると、
- 解像度72の場合は元のサイズ(×72÷72)
- 解像度150の場合は元のサイズ×150÷72
- 解像度300の場合は元のサイズ×300÷72
のように書き出されます。
例えば、720px × 720pxのサイズでAIファイルを作成したとします。
すると、それぞれ解像度を変更して書き出しをすると
- 解像度72の場合は720px × 720px(720px×72÷72)
- 解像度150の場合は1500px ×1500px(720px×150÷72)
- 解像度300の場合は3000px ×3000px(720px×300÷72)
という計算で書き出されます。
透明部分を透過させる設定[true/false] デフォルト:false
pngOpt.transparency = true;
アートボードの透明部分(何もおいていない所)を透過させるかどうかの設定です。
透過させられるのがPNGの良いところなので、特に理由がない限りは透過をオンにしておきます。
透明部分をぬりつぶす設定[true/false] デフォルト:false
pngOpt.matte= true;
「pngOpt.transparency」の設定とは逆に、何もオブジェクトを置いていない所を塗りつぶすかどうかを設定できます。
PNGで書き出す場合はなぜか白色に限定されます。それで困ることはないと思いますが背景を自動で塗りつぶしたい場合はJPEGを利用するか、自分で背景を敷く必要があります。
同じ結果になる2つの設定
pngOpt.transparency = false;
pngOpt.matte= true;
は2つとも透過をしないという同じ結果になります。
相反する設定をした場合、例えば
pngOpt.transparency = true;
pngOpt.matte= true;
のように透過をオンにしているのに、塗りつぶしもオンになっている場合は「transparency」の設定が優先されて透過されることになります。
アンチエイリアスの設定[true/false] デフォルト:false
pngOpt.antiAliasing = true;
これはギザギザの部分をなめらかに見えるようにしてくれるアンチエイリアスという機能をオンにするかどうかの設定です。
個人的に少しギザギザして違和感があるので、アンチエイリアスはオンにしています。必要に応じて変更してください。
書き出す場所と名前の指定
次に書き出す場所の設定ですが、書き出す場所と名前はフルパスで指定します。
D:/フォルダ名/ファイル名.png
のようにフォルダ名からファイル名まで指定します。
AIファイルと同じ場所・名前で書き出す
今回は、元のAIファイルと同じ場所・名前で書き出したかったので、AIファイルの場所・名前を抽出し、拡張子を変えてフルパスを作成しました。
var fRef =app.activeDocument;
//ファイルの名前
var myname = fRef.name;
//拡張子の変更
var newname = myname.replace(/\.ai/g,".png");
//ファイルのパス(ファイル名以外)
var mypath = fRef.path;
//パスとファイル名を組み合わせてフルパスに
var newpath = mypath+"/"+newname;
ファイルとパスの取得
app.activeDocument.name;
app.activeDocument.path;
で、それぞれ現在アクティブになっているファイルの名前とパスを取得できます。
また、わざわざ「app.activeDocument」と毎回書くのはめんどくさく見づらいので、
var fRef =app.activeDocument;
として「app.activeDocument」を「fRef」として扱うようにしています。
拡張子の変更
var newname = myname.replace(/\.ai/g,".png");
で、「.ai」を「.png」へと変更しています。
変更をしないと、ファイル自体はPNGなのに拡張子は「.ai」になるというおかしなことになるので必須です。
特定のフォルダに書き出したい
特定の場所に保存したい場合は
var newpath = "D:/フォルダ名/ファイル名.png"
のように指定します。
注意!!
保存先に同じ名前のファイルがあると、その上から保存されるので、注意が必要です。
書き出す範囲を指定する
PNGを書き出す際には、書き出す範囲を[左上のx,左上のy,右下のx,右下のy]のように指定します。
今回はアートボードの範囲を指定したいので、
var rect = fRef.artboards[0].artboardRect;
と書きました。これでアートボードの[左上のx,左上のy,右下のx,右下のy]を取得できます。
この設定では1つめのアートボードを書き出すように指定しています。(artboards[0]で1つめのアートボードを指す)
ちょっとした解説(読まなくてもOK)
スクリプト上では右下に行くほどyの値がマイナスになる
スクリプト上の座標では右下に行くほどyの値がマイナスになります。
今回の場合はアートボードの[左上のx,左上のy,右下のx,右下のy]を取得して、そのまま利用しているので関係ないですが、直接数字で示す場合は注意が必要です。
プログラミングの最初は0
こういったプログラミングの中では、1ではなく0が一番最初を示します。
- 0が1番め
- 1が2番め
- 2が3番め…
といったように1つずつずれています。
そのため、「artboards[0]」で1つめのアートボードを指すことになります。
書き出しを実行する
ここまでで、設定が出来たのでいよいよ書き出しを実行します。
今までのは書き出しをするための設定や情報を指定しているだけなので、これを書かないことには書き出されません。
saveFile = new File(newpath);
activeDocument.imageCapture(saveFile, rect, pngOpt);
としてあげることで、やっとPNGとして書き出すことができます。
ちなみに、imageCaptureでの書き出しの書き方は
activeDocument.imageCapture(保存するファイル,範囲,オプション)
のようになっています。
注意事項
スクリプトの注意点
- WindowsのIllustrator2021で動作確認済みです。
- このスクリプトはプロのプログラマーではない、生焼けのやつが作ったスクリプトです。そのことを念頭に置いて、自己責任でお使いください。
- 不具合があった時の場合に備えて、まずAIファイルを別名保存などをしてからお使いください。
- 無断で転載・販売することを固く禁じます。サイトなどでご紹介いただける場合はリンクをお貼りください。
- 改変して再配布などは大丈夫ですが、できればリンクなどして頂けると嬉しいです。
まとめ
スクリプトでPNGの書き出しをする上で必要な情報をまとめてみました。
最初、解像度によってサイズが変わることに気づかず、このあたりでつまづきました…。同じように苦戦している方の助けになれば幸いです。