MT 既定の CAPTCHA に関して

CAPTCHA の画像の生成に失敗する件についてググってみたら,解決策があっさり見つかった.

[mtdir]/lib/MT/Util/Captcha.pm

186行あたり
---------------------------------------------------------
my $im = $imbase->Montage(geometry => $geometry_str,
tile => $tile_geom);
---------------------------------------------------------



---------------------------------------------------------
my $im = $imbase->Append(stack=>"");
---------------------------------------------------------

に。

これだけで終わらせるのはしゃくなので,この対処でなぜ良いのかを調べた.と言っても ImageMagick の Perl API リファレンスを読んだだけ.

$imbase は,1 字ずつ描かれた画像を字数分保持しているようなオブジェクト.Montage() は,それらを並べた 1 枚の画像を生成して返すようなメソッド.並べ方は引数 tile で指定できる.2 行 3 列に並べたいなら tile => "3x2" とする.
一方 Append()は,$imbase が保持してる複数の画像を縦 (上→下) or 横 (左→右) に並べた 1 枚の画像を生成して返すようなメソッド.並べ方は引数 stack で指定できる.縦に並べたいなら stack => 真値 とする.

で,生成したい画像は字が描かれた画像を横 1 列に (デフォルトでは 6 字分) 並べたようなものだから,わざわざ $imbase->Montage(tile => "6x1"); なんてする必要は無くて $imbase->Append(); で十分,というわけ.

そもそも Montage() がなぜ失敗するのか,という点については未だ不明.より詳しい報告が既に出ているようだけれど.