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()
がなぜ失敗するのか,という点については未だ不明.より詳しい報告が既に出ているようだけれど.