有办法让PHP检测到损坏的图像。可以使用PHP的GD库或ImageMagick库来检测图像是否损坏。以下是使用GD库检测损坏图像的示例代码:
function isImageBroken($imagePath) {
$imageInfo = getimagesize($imagePath);
if ($imageInfo === false) {
return true;
}
$imageType = $imageInfo[2];
switch ($imageType) {
case IMAGETYPE_GIF:
return false;
case IMAGETYPE_JPEG:
$image = imagecreatefromjpeg($imagePath);
break;
case IMAGETYPE_PNG:
$image = imagecreatefrompng($imagePath);
break;
default:
return true;
}
$imageCheck = imagepng($image, $imagePath . '_tmp.png');
imagedestroy($image);
if ($imageCheck === false) {
return true;
}
$imageCheck = imagecreatefrompng($imagePath . '_tmp.png');
$imageCheck = imagepng($imageCheck, $imagePath . '_tmp2.png');
imagedestroy($imageCheck);
if ($imageCheck === false) {
return true;
}
$imageSize = filesize($imagePath);
$imageSizeCheck = filesize($imagePath . '_tmp2.png');
unlink($imagePath . '_tmp.png');
unlink($imagePath . '_tmp2.png');
if ($imageSize != $imageSizeCheck) {
return true;
}
return false;
}
使用ImageMagick库检测损坏图像的示例代码如下:
function isImageBroken($imagePath) {
try {
$image = new Imagick($imagePath);
$image->resizeImage(1, 1, Imagick::FILTER_POINT, 1);
$image->writeImage($imagePath . '_tmp.png');
$imageCheck = new Imagick($imagePath . '_tmp.png');
$imageCheck->resizeImage(1, 1, Imagick::FILTER_POINT, 1);
$imageCheck->writeImage($imagePath . '_tmp2.png');
$imageSize = filesize($imagePath);
$imageSizeCheck = filesize($imagePath . '_tmp2.png');
unlink($imagePath . '_tmp.png');
unlink($imagePath . '_tmp2.png');
if ($imageSize != $imageSizeCheck) {
return true;
}
return false;
} catch (Exception $e) {
return true;
}
}
这两种方法都可以检测图像是否损坏,可以根据实际情况选择使用哪种方法。
领取专属 10元无门槛券
手把手带您无忧上云