调整大小后,Imagecreatefromjpeg返回黑色图像

时间:2011-03-21 18:50:24

标签: php

我有一个脚本来调整上传图像的大小,但是当我使用它时,它只返回一个黑色方块。所有错误消息都指向此功能:

function resizeImage($image,$width,$height,$scale) {
    $newImageWidth = ceil($width * $scale);
    $newImageHeight = ceil($height * $scale);
    $newImage = imagecreatetruecolor($newImageWidth,$newImageHeight);
    $source = imagecreatefromjpeg($image);
    imagecopyresampled($newImage,$source,0,0,0,0,$newImageWidth,$newImageHeight,$width,$height);
    imagejpeg($newImage,$image,90);
    chmod($image, 0777);
    return $image;
}

我的错误记录:

PHP Warning:  imagecreatefromjpeg() [<a href='function.imagecreatefromjpeg'>function.imagecreatefromjpeg</a>]: gd-jpeg: JPEG library reports unrecoverable error
PHP Warning:  imagecreatefromjpeg() [<a href='function.imagecreatefromjpeg'>function.imagecreatefromjpeg</a>]: 'img/[hidden].jpg' is not a valid JPEG file
PHP Warning:  imagecopyresampled(): supplied argument is not a valid Image resource

2 个答案:

答案 0 :(得分:0)

  1. 检查imagecreatetruecolor是否成功。如果新图像“大”,则可能超过PHP memory_limit。如果由于任何原因失败,则此函数返回FALSE。
  2. imagecreatefromjpeg()同上。两个单独的图像可能符合内存限制,但一起可能太大。源图像也可能不存在。如果因任何原因失败,则此函数返回FALSE
  3. 检查imagecopyresampled()是否失败 - 失败时也返回FALSE。
  4. 检查imagejpeg()是否失败 - 也许您对$image中指定的任何文件没有写入权限。而且,此函数在失败时返回FALSE。

答案 1 :(得分:0)

根据Marc B的回答,您可以检查文件是否是JPG文件。 (JPEG,JPG,jpg,jpeg扩展名)。

可能是这样的:

$file = explode(".", $_POST['file']);
$file_ext = $file[count($file)]; // Get the last thing in the array - in this way the filename can containg dots (.)
$allowed_ext = array('jpg', 'JPG', 'jpeg', 'jpg');

if( in_array($file_ext, $allowed_ext )
{
    // The code for creating the image here.
}