使用PHP GD打开文件时判断图像类型(exif_imagetype)

在PHP中使用GD处理图片时

  • gif图片使用imagecreatefromgif

  • jpeg图片使用imagecreatefromjpeg

  • png图片使用imagecreatefrompng

虽然上传图片的时候可以通过文件后缀判断,但是这样并不安全。

这种情况下我们可以通过exif_imagetype判断图像的类型。

exif_imagetype函数

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

exif_imagetype — 判断一个图像的类型

基本语法

exif_imagetype(string $filename): int

exif_imagetype() 读取一个图像的第一个字节并检查其签名。

本函数可用来避免调用其它 exif 函数用到了不支持的文件类型上或和 $_SERVER['HTTP_ACCEPT'] 结合使用来检查浏览器是否可以显示某个指定的图像。

filename 被检查的图像文件名。

返回值

如果发现了恰当的签名则返回一个对应的常量,否则返回 false。返回值和 getimagesize() 返回的数组中的索引 2 的值是一样的,但本函数快得多。

使用PHP GD打开文件时判断图像类型(exif_imagetype)

图像类型常量

常量
1IMAGETYPE_GIF
2IMAGETYPE_JPEG
3IMAGETYPE_PNG
4IMAGETYPE_SWF
5IMAGETYPE_PSD
6IMAGETYPE_BMP
7IMAGETYPE_TIFF_II(Intel 字节顺序)
8IMAGETYPE_TIFF_MM(Motorola 字节顺序)
9IMAGETYPE_JPC
10IMAGETYPE_JP2
11IMAGETYPE_JPX
12IMAGETYPE_JB2
13IMAGETYPE_SWC
14IMAGETYPE_IFF
15IMAGETYPE_WBMP
16IMAGETYPE_XBM

示例

$image_type = exif_imagetype('test.jpg');

switch($image_type) {
    case IMAGETYPE_JPEG:
        echo "这是jpg图片";
        break;
        
    case IMAGETYPE_PNG:
        echo "这是png图片";
        break;
        
    default:
        echo "无法确定";
        break;
}

现在使用exif_imagetype可以判断需要使用imagecreatefromjpeg还是imagecreatefrompng了。

调用未定义的函数exif_imagetype()

如果使用exif_imagetype函数的时候报错提示:Call to undefined function exif_imagetype()

需要在php.ini中启用:

extension=php_mbstring.dll

extension=php_exif.dll

启用后重新启动服务器。

本文来源:词雅网

本文地址:https://www.ciyawang.com/php-gd-exif_imagetype.html

本文使用「 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 」许可协议授权,转载或使用请署名并注明出处。

相关推荐