読者です 読者をやめる 読者になる 読者になる

Python Imaging Library, FreeType のインストール

python

PIL

前回のエントリ
(Python Image Library(PIL)の使い方 - I/O Error : My Knowledge)では

import Image

としていましたが、きちんとしたPILのインストールを行ったのでメモ。

ダウンロード

まずはPILの公式サイト(Python Imaging Library (PIL))から
ソースをダウンロードしてきます。
現在のバージョンは1.1.7なので、最新版を手に入れます。
~/Download に保存しました。

インストール

cd ~/Download
gunzip Imaging-1.1.7.tar.gz
tar xvf Imaging-1.1.7.tar
cd Imaging-1.1.7
python setup.py install

とやればOK.

使い方

>>> from PIL import Image, ImageDraw

これで前回と同じImageモジュールと、描画用のImageDrawモジュールを
利用出来るようになります。

線やテキストを書き込む

>>> from PIL import Image, ImageDraw, ImageFont
>>> img = Image.new('RGB', (1000, 1000), (255,255,255))
>>> # 1000*1000の白い画像
>>> draw = ImageDraw.Draw(img)
>>> draw.line((20, 500, 800, 80), fill=(255, 0, 0))
>>> # (20, 500)から(800, 80)への赤い直線
>>> draw.text((40, 80), 'hello', (0, 0, 0))
>>> # (40, 80)に黒字でhelloを書く.
>>> img.show()

といった形で使える.

ImageDraw.ImageDraw.text

上で書いた

draw.text

はフォントサイズを指定できるのだがそれがややこしい.
詳しく見てみると,

In [1]: from PIL import ImageDraw
In [2]: ImageDraw.ImageDraw.text?
Type:       instancemethod
Base Class: <type 'instancemethod'>
String Form:<unbound method ImageDraw.text>
Namespace:  Interactive
File:       /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PIL/ImageDraw.py
Definition: ImageDraw.ImageDraw.text(self, xy, text, fill=None, font=None, anchor=None)
Docstring:  <no docstring>

とあるように,引数にfontを指定できるようになっている.

ImageFont

from PIL import ImageFont

でフォント関係のモジュールを用意する.
そして,

font=ImageFont.truetype(filename='/System/Library/Fonts/Monaco.dfont', size=200)

としてフォント(Monaco.dfontは適当)を用意して,

draw.text((50,50),"hello",font=font,fill=(0,0,0))

これでフォントサイズ200でhelloが書けた.

Freetypeのインストール

PILをインストールしただけでfontを設定しようとすると,

ImportError: The _imagingft C module is not installed

と怒られることがある.
_imagingft,ってなんやねんとなるけど何とかなりました.
freetypeというものが必要だそうです.
まずはThe FreeType Project - Browse /freetype2 at SourceForge.netに行って
最新鋭のfreetype-2.4.6.tar.bz2をダウンロードする.
ここでは同じく~/Downloadに保存.

cd ~/Download
gunzip freetype-2.4.6.tar.bz2
tar xvf freetype-2.4.6.tar
cd freetype-2.4.6/
./configure
make
make install

これでfreetypeのインストールが完了,ではない.
次に,

cd ~/Download/Imaging-1.1.7/
python setup.py build
sudo python setup.py install

これで晴れてfontを弄れるようになりました.
長かった.

参考

In [1]: from PIL import Image, ImageDraw, ImageFont

In [2]: img = Image.new('RGB', (1000, 1000), (255, 255, 255))

In [3]: draw = ImageDraw.Draw(img)

In [4]: font=ImageFont.truetype(filename='/System/Library/Fonts/Monaco.dfont', size=200)

In [5]: draw.line((20, 500, 800, 80), fill=(255, 0, 0))

In [6]: draw.line((200, 10, 90, 800), fill=(255, 0, 255))

In [7]: draw.text((50,50),"hello",font=font,fill=(0,0,0))

In [8]: draw.text((100,500),"World",font=font,fill=(0,255,0))

In [9]: img.show()

In[10]: img.save("sample.jpg", "JPEG")

これでsample.jpgが生成されました.

ではでは.