2

次のスクリプトはループで実行され、 を使用して画像を取得し、 を使用しLWP::UserAgentてサイズを変更しますImage::Magick

Image::Magickダウンロードしたイメージを読み取るときに、次のエラーが発生します。

Exception 450: Unsupported marker type 0x54

LWP でダウンロードした画像を自分のコンピューターにダウンロードし、フォト エディターで開き、.jpg ファイルとして保存し、アップロードして読み取ろうとするとImage::Magick、すべて問題ありません。これにより、画像が正しく保存されていないと思われます。

LWP::UserAgentクライアントがデータを要求していると思わない限り、接続しているサーバーはダウンロードを許可しないため、使用する必要があります。

use LWP::UserAgent;
use Image::Magick;  

$ua = new LWP::UserAgent;
$ua->agent("$0/0.1 " . $ua->agent);
$ua->agent("Mozilla/8.0");

my $PICURL  ="http://www.example.com/img.aspx?pid=cjfsaf79afffafhfah777af7";
my $PICDEST ="/var/vhosts/mysite.com/httpdocs/images";
my $PICNAME ="01.jpg";

my $response = $ua->get("$PICURL");

open(outfile, ">:raw", "$PICDEST/$PICNAME");
binmode outfile;

if ($response->is_success) {
  print outfile $response->content;
  $Pi++;
  $PTOT++;
}
else {
  die $response->status_line;
}

$image = new Image::Magick;
$image->Read("$PICDEST/$PICNAME");
$image->Scale(width=>800, height=>600);
$image->Write("$PICDEST/$PICNAME");
$image->Scale(width=>216, height=>163);
$image->Set(quality=>90);
$image->Write("$PICDEST/TH_$PICNAME");  
4

3 に答える 3

4

絶対に使わない

$response->content()

あなたがしたい

$response->decoded_content( charset => 'none' )
于 2012-12-30T19:28:42.780 に答える
2

おそらく、圧縮された結果またはエンコードされた結果が得られます。->contentの代わりに->decoded_contentを試してください。

HTTP :: Responseドキュメントから:

$ r-> content($ bytes)

これは、生のコンテンツを取得/設定するために使用され、HTTP::Message基本クラスから継承されます。コンテンツへのアクセスに使用できる詳細およびその他の方法については、HTTP::Messageを参照してください。

$ r-> decode_content(%options)

これにより、Content-Encodingとcharsetがデコードされた後にコンテンツが返されます。詳細については、HTTP::Messageを参照してください。

于 2012-12-30T19:13:44.390 に答える
0

この時点でこれは非常に古いことを知っていますが、私もこれに遭遇しました。実際に作業する前に画像をディスクに保存していました。その間、ストリーミング/書き込み先のファイルハンドルを設定する必要がありました「ビンモード」に。

open $fh....
binmode($fh)
print $fh .....
close $fh
于 2016-08-08T18:44:38.520 に答える