ツイート
2021.10.19
PerlのGD::Image->new()は画像じゃないデータを読み込ませるとエラーになることがあるので事前に手動で画像であることを確認した方が良い
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new("GET",'http://xxxxx/xxx.jpg');
my $Image=$ua->request($req)->content;
if (ord(substr($Image,0,1))==255 && ord(substr($Image,1,1))==216){
my $GDImage = GD::Image->new($Image);
if ($GDImage == undef){エラー処理}
基本はGD:Image->new(xxx)した時に失敗すると作った画像オブジェクトがundefineになって失敗したことが分かってスクリプトも落ちないんだけど、gzip圧縮された何かとか、テキストとか読み込ませた時も、何かのきっかけでエラーでスクリプト止まっちゃうことがある。
解決法としては、JPEGファイルの最初はFF(255)D8(216)で始まるらしいので、それを利用して画像っぽくない時はGD:Imageに進ませないようにしたらエラー出なくなった。
参考:
Category:Perl・Javascript・python、サーバー管理メモ
コメント
この記事のアクセス数:→カテゴリー:Perl・Javascript・python、サーバー管理メモ(記事数:83)
アクセス数の多い記事(過去1ヶ月)