ビットマップ画像を含むPostScriptファイルを小さくする方法

最終更新: 1999年11月23日
プリンタに搭載されているPostScriptインタープリタには圧縮されたデータを展開する機能があるので, それを利用してビットマップ画像を含むPostScriptを小さくする方法を説明します. 画像をJPEG, BMP, GIFなどのビットマップ形式で持っていて, それをPostScript形式に変換する状況を対象にします. PostScript形式の文書をホームページに置いたりプレプリントサーバーに置くときに知っていると便利です. pnmtops以外はPostScript level 2以上のプリンタしか印刷できないPSを生成するので注意して下さい.

PS level 2以上で対応している圧縮方法は
DCTアルゴリズム
JPEGで使われているアルゴリズム. 写真の圧縮に最適.

出来上がったPSをgzipまたはzipで圧縮する場合, PSの中の画像が以下のアルゴリズムで圧縮されていてもされていなくても, 最後にできる圧縮されたPSファイルの大きさはそれほど変わりません. 上記のDCTアルゴリズムではDCTで圧縮したほうがしないよりかなり小さくなります.
Flateアルゴリズム
gzipやzipで使われているアルゴリズム. 写真以外の圧縮に最適だが, PostScript level 3でしか使えない.
LZWアルゴリズム
GIFで使われているアルゴリズム. 圧縮率はなかなか良いが, Unisysの特許に抵触する.
Run Lengthアルゴリズム
あまり圧縮率は良くない.
G3 FAXアルゴリズム
白黒画像に適したアルゴリズム. このアルゴリズムで画像を圧縮してPSに埋め込めるプログラムは知りません. 圧縮率はRun Lengthと同じくらいです.
があります. この内上の4つでPSファイルに圧縮した形式で画像を埋め込む方法を説明します.

DCTアルゴリズム

まず画像をJPEG形式に変換してjpeg2psでPSに変換すればOKです. 写真の場合, 元のサイズの百分の一, 圧縮せずに作ったPSをgzipまたはzipで圧縮した場合の十分の一程度まで小さくなります. JPEGがプログレッシブ形式だとエラーになるので必ず普通にJPEGにして下さい.

Flateアルゴリズム

ImageMagickに含まれるconvertプログラムで"convert -compress Zip 元のファイル 新しいファイル.ps3"のように変換すればOKです. ImageMagick以外にFlateアルゴリズムで圧縮したPSを作れるプログラムは知りません.

LZWアルゴリズム

コンパイル時に"--enable-lzw"を指定して作った ImageMagickに含まれるconvertプログラムで"convert -compress LZW 元のファイル 新しいファイル.ps2"のように変換すればOKです. EPS形式にした場合は, .ps2を.eps2にします.

Run Lengthアルゴリズム

ImageMagickに含まれるconvertプログラムで"convert -compress RunLengthEncoded 元のファイル 新しいファイル.ps2"のように変換すればOKです.
またpbmplusの中のpnmtopsで"pnmtops -rle"としてもできますが, 画像を不必要に劣化させてPSに埋め込むことがあります. 劣化させないpnmtopsがpbmplus-autoconf.tar.gzの中にpnmtops2という名前で含まれています.

TeXからPS及びPDFを作るときのコツに戻る

松本 隆太郎
感想コメントなどはEmail Addressに送ってください。