首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有办法让PHP检测到损坏的图像?

有办法让PHP检测到损坏的图像。可以使用PHP的GD库或ImageMagick库来检测图像是否损坏。以下是使用GD库检测损坏图像的示例代码:

代码语言:php
复制
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库检测损坏图像的示例代码如下:

代码语言:php
复制
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;
    }
}

这两种方法都可以检测图像是否损坏,可以根据实际情况选择使用哪种方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券