Friday, April 20, 2018 / ExtendScript, Illustrator, EPS, DTP

MacOS で EPSファイルをJPEGに変換するなど

macOS High Sierra

EPSをあれこれする必要が生じて、その対処であれこれしたことをメモ。 処理に使用した環境は macOS High Sierra です。

ダミーの EPS を手書きする

ダミーの ESP 画像を用意する必要があったのですが、Adobe CC 系のアプリで EPS 書き出しすると結構ファイルサイズが大きくなってしまう。 ググってみると、EPSは単なるテキストファイルとして直接テキストエディタで記述することができることがわかったので、手書きすることに。

square.eps

%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 300 300

newpath
3 3 moveto
296 3 lineto
296 296 lineto
3 296 lineto
3 3 lineto
gsave
0.9 0.6 0.4 setrgbcolor
fill
grestore
0 0 0 setrgbcolor
3 setlinewidth
stroke

%%EOF

こんな画像です。

square

EPS を JPEG に変換したい ( Ghostscript 編 )

次に諸事情により EPS を JPEG に変換する必要が生じた。 しかも、EPSファイルは大量にあるため、バッチ変換したい。

EPSといえば Ghostscript なので、mac で Ghostscript の gs コマンドを使えるようにする。

ghostscript.com から ダウンロード して ghostscript-9.23.tar.gz を展開、あとはいつも通り・・・

./configure --disable-compile-inits --prefix=/usr/local/gs923
make
sudo make install

ですんなりインストールできた。 あとは、~/.bashrc にパスを通すだけで gs コマンドが使えるようになる。

PATH=$PATH:/usr/local/gs923/bin

Ghostscriptユーザで Mac 使用者が増えているのかな? ソースから簡単にインストールできるのはありがたい。

EPSファイルを JPEG 変換するには:

gs -dBATCH -dNOPAUSE -sDEVICE=jpeg -dEPSCrop -sOutputFile=square.jpg square.eps

ポイントは -dEPSCrop オプション。これで意図通りに画像をクロップしてくれます。
解像度を制御するには -r72 とか -r300 などをオプションに追加すればよい。
さらに品質を指定するには -dJPEGQ=100 などを追加。

ちなみに、PNG 形式で出力したい場合はこれ:

gs -dBATCH -dNOPAUSE -sDEVICE=png16m -dEPSCrop -r72 -sOutputFile=square.png square.eps

-sDEVICE オプションに何が使えるかは このあたりのドキュメント Devices を見ればわかる。

For normal use we recommend png16m for 24-bit RGB color, or pnggray for grayscale とあるから、通常使用では png16m か grayscale がおすすめということらしい。 32-bit RGBA の場合は pngalpha を使うと。 ( pngalpha : The pngalpha device is 32-bit RGBA color with transparency indicating pixel coverage. )

これで、大量に EPS があっても変換は楽勝です。

EPS を JPEG に変換したい ( Illustrator CC 編 )

Illustrator でも Extendscript を使うことで、バッチ変換できます。 Ghostscript で変換した方がてっとりばやいとは思いますが、 Illustrator Extendscript で JPEG 変換の情報が少なかったので、ここにメモしておきます。

/path/to/ の部分は使用している環境に読み替えてください。

var epsFilename = 'square.eps';
var inputFile = File('/path/to/'+epsFilename);

var doc = app.open( inputFile );

epsFilename.match(/(.*).eps/);
var jpegFilename = RegExp.$1 + '.jpg';
var outputFile = File('/path/to/'+ jpegFilename);

var exportOptions = new ExportOptionsJPEG();
exportOptions.antiAliasing = true;
exportOptions.artBoardClipping = false;
exportOptions.qualitySetting = 100;
exportOptions.horizontalScale = (300/72) * 100;
exportOptions.verticalScale = (300/72) * 100;

doc.exportFile( outputFile, ExportType.JPEG, exportOptions);

doc.close( SaveOptions.DONOTSAVECHANGES );

どうやら変換時の解像度指定は exportOptions.horizontalScale と exportOptions.verticalScale を使うようです。