2

PHP を使用して、いくつかの jpeg 画像のサイズ変更と再サンプリングに取り組んでいます。500px x 500px を超える画像を取得し、最大辺を 500px にします。これは比較的単純なはずですが、スクリプトを実行するたびに黒い jpeg が作成されます。作成された jpeg のサイズは適切ですが、サイズ変更された画像は含まれていません。GD ライブラリが有効になっており、元のイメージが検出されていることを確認しました。このコード ブロックを 1 日半見ていましたが、運が悪かったのですが、何が表示されていないのでしょうか?

    <?php
$testimage = 'SandyCayCaribbeanbeach.jpg';
$testfolder = "testimage/testimage.jpg";
list($orgwidth, $orgheight, $type, $attr) = getimagesize($testimage);

echo "org. width  " . $orgwidth . "px" . "<br />";
echo "org. height  " . $orgheight . "px" . "<br />";

if($orgwidth > 500 || $orgheight > 500){
    if($orgwidth > $orgheight){
        header('Content-type: image/jpeg');
        $ratio = $orgwidth/500;
        $newwidth = floor($orgwidth/$ratio);
        $newheight = floor($orgheight/$ratio);

        $image_p = imagecreatetruecolor($newwidth, $newheight);
        $image = imagecreatefromjpeg($testimage);
        imagecopyresampled($image_p, $image, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

        imagejpeg($image_p, $testfolder, 100);
    }
    else{
        header('Content-type: image/jpeg');
        $ratio = $orgheight/500;
        $newheight = floor($orgheight/$ratio);
        $newwidth = floor($orgwidth/$ratio);

        $image_p = imagecreatetruecolor($newwidth, $newheight);
        $image = imagecreatefromjpeg($testimage);
        imagecopyresampled($image_p, $image, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

        imagejpeg($image_p, $testfolder, 100);
    }
}
    ?>
4

4 に答える 4

2

URLではなく、画像へのフルパスを指定する必要があることがわかりました。

/path/to/image.jpg

それ以外の

http://www.blah.com/image.jpg

これを正しく機能させるために。それが誰かを助けることを願っています。

于 2011-10-26T22:01:32.860 に答える
2

まず、エラー報告が有効になっていることを確認してください。また、ソース イメージ "SandyCayBaribbeanbeach.jpg" が見つかることを確認してください。

画像のサイズ変更を処理する前に簡単なif(file_exists())チェックを行うと、エラーをトラップするのに役立ちます。

于 2011-02-02T01:22:16.687 に答える
0

最近、コードの一部でこれと戦ったところ、次元が定義されていない場合でも imagecopyresampled が 1 を返すことがわかりました。ソースの高さと幅が設定されていることを確認してください。

于 2011-02-02T19:58:15.100 に答える
0

ソース画像が本当に JPEG であることを再確認してください。Windows を実行している場合は、MS ペイントで開き、JPEG として再保存します。これにより、別の形式である可能性を排除できます。

于 2011-02-02T01:20:40.233 に答える