imagecopyresampled生成黑盒但不重新取样图像

时间:2011-02-02 01:17:41

标签: php resize jpeg resampling

我正在努力使用PHP调整大小和重新采样一些jpeg图像。它采用大于500px乘500px的任何图像,并使最大边500px。这应该是相对简单的,但每次我运行脚本时都会生成一个黑色的jpeg。创建的jpeg具有适当的尺寸,但不包括调整大小的图像。 GD库已启用,我已确定它正在查找原始图像。我一直在看这段代码一天半没有运气,我没看到什么?

    <?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 个答案:

答案 0 :(得分:2)

首先确保您已启用错误报告。还要确保它可以找到源图像“SandyCayBaribbeanbeach.jpg”。

在处理图像大小调整之前进行简单的if(file_exists())检查有助于捕获错误。

答案 1 :(得分:2)

我发现我必须为图片指定一个完整的路径一个URL,即

/path/to/image.jpg

而不是

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

让它正常工作。希望它可以帮到某人。

答案 2 :(得分:0)

仔细检查以确保您的源图像真的是JPEG。如果您运行的是Windows,请在MS Paint中将其打开并重新保存为JPEG。这将有助于排除它是一种不同格式的可能性。

答案 3 :(得分:0)

我最近在一段代码中也讨论了一段时间,发现如果没有定义尺寸,imagecopyresampled甚至会返回1。确保设置了源高度和宽度。