【问题标题】:PHP imagecreatefromjpeg, imagecreatefrompng error handlingPHP imagecreatefromjpeg、imagecreatefrompng 错误处理
【发布时间】:2018-11-30 19:22:01
【问题描述】:

我想省略解析提到的函数的错误消息字符串来获得错误的确切含义。下面解释原因。

我创建了以下函数来检查图像是否为有效的 JPEG 或 PNG 并检查其完整性:

function validateImageByCreatingImageResource($filePath)
{
    $validationResult = true;
    $exif = exif_imagetype($filePath);
    if ($exif === false) {
        $validationResult = false;
    }
    if ($exif) {
        $imageResource = false;
        switch ($exif) {
            case IMAGETYPE_JPEG:
            case IMAGETYPE_JPEG2000:
                $imageResource = @imagecreatefromjpeg($filePath);
                break;
            case IMAGETYPE_PNG:
                $imageResource = @imagecreatefrompng($filePath);
                break;
        }
        if ($imageResource !== false) {
            imagedestroy($imageResource);
        }
    }
    $error = error_get_last();
    if (is_array($error)) {
        error_clear_last();
        $validationResult =  false;
    }
    return $validationResult;
}

现在,我可以检测到错误,但问题在于它们的处理方式。例如,这里有 2 个类型为 E_NOTICE 的错误:

  1. 原因:文件结尾无效(EOI 标记错误)

    imagecreatefromjpeg(): gd-jpeg, libjpeg: 可恢复错误: Premature JPEG文件结束

  2. 原因:EOI 标记后的附加数据(由制作图片的设备插入)

    imagecreatefromjpeg(): gd-jpeg, libjpeg: 可恢复错误:无效 顺序 JPEG 的 SOS 参数

我的问题:我当然可以解析错误消息字符串,但是有没有更好的方法来单独处理这些错误?

另外,我没有找到任何其他解决方案(通过使用 php 工具)如何验证图像完整性。

====================================编辑=========== ==========================

澄清更多:我需要确定图像到底有什么问题,因为我需要处理图像部分上传到服务器的情况,并允许图像有效,但在 End Of 文件末尾有附加信息图像标记。

array getimagesize ( string $filename [, array &$imageinfo ] )

为数组提供此信息:

[
    0 => integer width
    1 => integer height
    2 => integer type
    3 => string 'width="<width>" height="<height>"'
    bits => from what i understand it is color bits
    channels => integer number of channels
    mime => mime type eg. 'image/jpeg'
]

仅当图像元数据无效时才会发出警告。没有关于来自imagecreatefromjpeg() 的 E_WARNING 等正确 SOS 标记的信息

【问题讨论】:

    标签: php validation png jpeg


    【解决方案1】:

    这个怎么样:

    array getimagesize ( string $filename [, array &$imageinfo ] )
    

    返回一个包含图像信息的数组,如果图像无效,则返回 FALSE

    http://php.net/manual/en/function.getimagesize.php

    【讨论】:

    • 感谢您的回答,我更新了我的问题,以澄清我需要什么信息以及用于什么
    猜你喜欢
    • 2011-06-10
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多