上传后如何检测损坏的图像?
我正在使用这样的代码:
$imageSize = getimagesize($tmp_name);
if(!$imageSize || !in_array($imageSize['mime'], $allowMimeType)){
$this->error = 'Bad Image';
@unlink($tmp_name);
return false;
}
$tn = imagecreatetruecolor(80, 80);
switch ($imageSize['mime']){
case 'image/jpeg':
$userphoto = imagecreatefromjpeg($tmp_name);// Error 1
break;
case 'image/png':
$userphoto = imagecreatefrompng($tmp_name);// Error 1
break;
case 'image/gif':
$userphoto = imagecreatefromgif($tmp_name);// Error 1
break;
case 'image/bmp':
$userphoto = imagecreatefromwbmp($tmp_name);// Error 1
break;
default:
$this->error = 'unknown image';
@unlink($tmp_name);
return false;
break;
}
imagecopyresampled($tn, $userphoto, 0, 0, 0, 0, 80, 80, $width, $height);// Error 2
imagejpeg($tn,'images/userphoto/'.$this->username.'.jpg',100);
chmod('images/userphoto/'.$this->username.'.jpg', 0777);
@unlink($tmp_name);
USERPROFILE::updatePhotoByUsersId($this->username.'.jpg', $this->users_id);
但有时候我会给出2个错误串联,
// Error 1
imagecreatefromwbmp()[href ='function.imagecreatefromwbmp'> function.imagecreatefromwbmp]:>'images / userphoto / 4ff7db9800871.bmp'不是有效的WBMP文件
imagecreatefromgif()[href ='function.imagecreatefromgif'> function.imagecreatefromgif]:>'images / usersphoto / 4fe70bb390758'不是有效的GIF文件
// Error 2
的评论栏中
imagecopyresampled():提供的参数不是有效的图像资源
答案 0 :(得分:2)
在进行任何进一步处理之前,您应该检查getimagesize()的返回值。
如果getimagesize()
返回FALSE
,则意味着它已失败且文件出现问题,因此您应该终止。图像通过此检查后,您可以继续处理。
至于你获得supplied argument is not a valid Image resource
的原因,解释很简单:很可能,$userphoto
中存储的图片实际上是FALSE
,因为imagecreatefrompng()
和其他{{1}函数失败,返回imagecreatefrom
。
解决方案:在继续之前,检查上传的图片是否对FALSE
有效。
上传失败原因的一些可能原因:
关于getimagesize()
失败,这是因为gd不支持BMP文件。您需要将BMP转换为gd可以使用的格式。例如,您可以使用bmp2png。