PS -> EPS -> jpeg (, etc.) な話(python pillow とともに)

間違えて PostScript なファイルを手にしちゃってどうしたものやら。

みたいなシチュエーションて、今そんなに多いかしらね、とは思う。TeX, LaTeX な人たちは別の理由で困らんはずだし。

つまりは、(潜在的にでしかないにせよ) PostScript を日常的に本格的に扱う人たちは PostScript を他のフォーマットに変換する道具に囲まれていて、そうでない人たちが突如 PostScript でブツを受け取る機会は少ないであろうなぁと。

そう思うにも関わらず、今回のネタというのは、「PostScript を他のフォーマットに変換する道具には囲まれていないのにこれをゴニョゴニョする必要に迫られた」という想定の話。

話の核心部は PSDraw, EpsImagePlugin の使用例 として書いたことが全て。そうなんだけれど、そこで書いたこととは少し違った切り口で説明してみたくなったの。

「間違えて PostScript なファイルを手にしちゃ」える、個人的にお気に入りの例がある。Mark B. Hanson さんが公開しているこれ:

説明を読めばわかる通り、Bourne shell で書かれてる。ほんとに Bourne shell だけで書かれてる。歴史は恐ろしく古い。ChangeLog によれば、少なくとも 1987 年よりも昔に USENET に投稿されたものがオリジナル。てわけでワタシがこれを知ったのも、微かな記憶によれば、学生時代、つまり 20 年前くらいと思う。当時は Unix ワークステーションと PostScript プリンターの環境だったので、そのまんま lpr で印刷してた。

Bourne shell、つまり元はといえば Unix 用なので、Windows で遊ぶには Unix もどき環境が必要。MSYS とか cygwin とかね。して依存物はといえばほんとになんにもなくて、素のままの MSYS で問題なく動かせる。

ではめでたく困ってみよう:

で、どうすれば? 読めへんし。(というか Adobe 製品を持ってたりすると全然困んなかったりもするんだけど、今はそれすらもない想定として。)

すわ、Pillow の出番。ここに書いた通り:

1 >>> from PIL import Image
2 >>> im = Image.open("2017_07.eps")
3 >>> im.save("2017_07.jpg")

ん? 動かない? Sorry, Ghostscript のインストールが必要です。…てか Ghostscript をインストールしちゃった時点でもう「EPS でも困らない」かったりはするんだけどね。ともあれうまくいけば以下 2017_07.jpg の出来上がり:

めでてぇな、っと言いたいところなんだけれど、PSDraw, EpsImagePlugin の使用例 の話はこれだけでは終わっていなくて、「%%BoundingBox」が書き込まれていない PostScript からどうやって EPS として誤魔けさせるかのことを書いてる。無論所詮テキストファイルなので、「%%BoundingBox」を自分でテキストエディタで書き込んでもいいんだけれど、Ghostscript に計算させる、というのが Andrew T. Young さんの記事 に書いてあることであり、それと同じことを アタシは pillow からやってるわけね。