0

私は現在、Imagemagickを使用して小さな画像処理タイプのプロジェクトを実行することにより、自分自身にPHPを教えようとしています。基本から始めるために、画像を読み込んでPNGに変換する簡単なコードをいくつか作成しました。

ただし、ローカル画像ファイルから読み取ることはできますが、URLでreadImageFile()を呼び出すとクラッシュし、次のエラーが発生するため、URLから画像を読み取ることができません。

致命的なエラー:C:\ xampp \ htdocs \ imagepractice \ imagemagicktest.php:8スタックトレース:#0 C:\ xampp \ htdocs \ imagepractice \ imagemagicktest.php(8 ):Imagick-> readimagefile(Resource id#3)#1 {main}が8行目のC:\ xampp \ htdocs \ imagepractice\imagemagicktest.phpにスローされます

私はこの1時間グーグルを使ってこれを修正する方法を見つけましたが、役に立たなかったのですが、私が見つけた唯一のリードはreadImage関数(Imagick)の使用エラーです。ただし、その問題とは異なり、私はreadImageを完全に使用でき、画像のURLだけでなく、ローカルファイルでもreadImageFileを使用できます。

そこにある唯一のコメントから、それはおそらくWindowsに固有のバグのようですが、誰かがこれを確認/拒否したり、CRTパラメータエラーを修正する方法を提案したりできるのではないかと思いました。

参考までに、私が書いたコードは以下のとおりです。

<?php
$im = new Imagick();

//$im->newPseudoImage(1000, 1000, "magick:rose"); //this works!

//$im->readImage("images\\wheels.jpg"); // this works!

$handle = fopen("http://www.google.com/images/srpr/logo3w.png", "rb");
$im->readImageFile($handle); //this line crashes!
fclose($handle);

$im->setImageFormat("png");
$type = $im->getFormat();
header("Content-type: $type");
echo $im->getImageBlob();
?>

さらに、64ビットのWindows 7を実行しており、XAMPP 1.7.7(PHP 5.3.8を使用)を使用しており、最初にこれらの手順を使用してImagemagick6.6.4をインストールしました。(代わりに6.6.4バージョンをImagemagick 6.6.2に置き換えましたが、ここでのコメント投稿者の提案に従って、何も修正されていません。)

4

1 に答える 1

0

別のコーディングフォーラムの友好的な人々のおかげで、私はついにエラーの発生を止めてこのコードを機能させる方法を見つけました。残念ながら、そもそもCRTパラメータエラーの原因はまだわかりませんが、fopenからfile_get_contentsに切り替えることで問題は解決しました。

更新されたコードの動作:

<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);

$im = new Imagick();

//$im->newPseudoImage(1000, 1000, "magick:rose"); //this works!
//$im->readImage("images\\wheels.jpg"); //this works!

$url = "http://www.google.com/images/srpr/logo3w.png";
$source = @file_get_contents($url);
if(!$source){
    throw new Exception("failed to retrieve contents of $url");
}

$im->readImageBlob($source);

$im->setImageFormat("png");
$type = $im->getFormat();
header("Content-type: $type");
echo $im->getImageBlob();
?>

しかし、私が投稿したフォーラムの他の誰かによると、

curlを使用してください。一部の場所では、PHPでallow_url_fopenが無効になっています。私はXAMPPを使用してWindows764ビットマシンで開発を行っており、何をしていてもカールは毎回機能します。

安全のために、代わりにcurlを使用して、それが機能するかどうかを確認するように変更しますが、少なくとも今のところ問題は解決しています。

于 2012-06-16T16:35:12.300 に答える