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

PILとGDでGIFを出力した場合の疑問点

Python

まあ普通はPILだけで十分なのでしょうが、Pythonのgdmodule(GDバインディング)でGIFを出力した場合に、どうしてこんなに出力サイズが違うのかが疑問なわけです。

from cStringIO import StringIO
from PIL import Image
import gd

# PIL
img = Image.new("L", (1, 1))
fp = StringIO()
img.save(fp, format="GIF")
print "PIL", len(fp.getvalue())

# GD
img = gd.image((1, 1))
fp = StringIO()
img.writeGif(fp)
print "GD", len(fp.getvalue())

結果。

PIL 800
GD 35

GIFのフォーマット関連だと思いますが、PILのGIFのオプションを見ても、それっぽいのは書いていないしなぁ。やりたいことは、

  • 透明色と基本色1色を指定する
  • できるだけ出力サイズを小さくする

ということなんだけれども、どなたかPILでこれを実現する方法をご存知の方がいらっしゃればご教授ください。


あと、全く蛇足ながら*1、どうでも言いこといいますね。

PHP┌|∵|┘だとみんなGDライブラリを使うだろうから、この種の疑問が生じなくてよいですね┌|∵|┘。


さらに蛇足ながら、Perlで、

use strict;
use warnings;
use Imager;

my $img = Imager->new(xsize => 1, ysize =>1);
$img->write(file => 'empty.gif') or die $img->errstr;

のようなコードで、

format 'gif' not supported - formats bmp, ico, jpeg, pnm, raw, sgi, tga available for writing at /home/perezvon/empty_gif.pl line 6.

のようなエラーが生じた場合、何が足りないんだろう?(ImagerがGIFをサポートしていないってことはあるまい?)

*1:Pythonだけに