我有一个脚本来调整上传图像的大小,但是当我使用它时,它只返回一个黑色方块。所有错误消息都指向此功能:
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
答案 0 :(得分:0)
imagecreatetruecolor
是否成功。如果新图像“大”,则可能超过PHP memory_limit。如果由于任何原因失败,则此函数返回FALSE。imagecreatefromjpeg()
同上。两个单独的图像可能符合内存限制,但一起可能太大。源图像也可能不存在。如果因任何原因失败,则此函数返回FALSE imagecopyresampled()
是否失败 - 失败时也返回FALSE。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.
}