千家信息网

利用PHP读取到图片的EXIF信息的方法是什么

发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,这篇文章主要讲解了"利用PHP读取到图片的EXIF信息的方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"利用PHP读取到图片的EXIF信息的方
千家信息网最后更新 2024年11月20日利用PHP读取到图片的EXIF信息的方法是什么

这篇文章主要讲解了"利用PHP读取到图片的EXIF信息的方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"利用PHP读取到图片的EXIF信息的方法是什么"吧!

在我们拍的照片以及各类图像文件中,其实还保存着一些信息是无法直观看到的,比如手机拍照时会有的位置信息,图片的类型、大小等,这些信息就称为 EXIF 信息。一般 JPG 、 TIFF 这类的图片文件都会有这样的信息。EXIF 其实就是专门为这种数码照片所定制的,专门用于记录数码照片的属性信息和拍摄数据的,最初由日本制定。这个其实很好理解,日本对相机行业基本是垄断般的存在,所以这类的标准当然就是由他们制定啦!

EXIF 在 Windows 系统中具有原生的支持,鼠标右键点击图片打开菜单,然后点击属性并切换到详细信息就可以直接看到图片文件的 EXIF 信息了。由于这些信息是可以被随意编辑的,所以它们可以作为一些参考,并不能作为某些功能属性的确定值来获取,比如宽高这些信息就不要完全相信 EXIF 中的。

获取 EXIF 中的图片类型信息

首先,我们看下通过 EXIF 来查看图片的类型。

var_dump(exif_imagetype($png)); // int(3)echo exif_imagetype($png) == IMAGETYPE_PNG ? $png . '是 PNG 图片' : $png . '不是 PNG 图片', PHP_EOL;// ../img/1.png是 PNG 图片var_dump(exif_imagetype($jpg)); // int(2)echo exif_imagetype($jpg) == IMAGETYPE_JPEG ? $jpg . '是 jpg 图片' : $jpg . '不是 JPG 图片', PHP_EOL;// ../img/2.jpg是 jpg 图片

直接使用 exif_imagetype() 函数就会返回一个图片类型的常量,也就是以 IMAGETYPE_ 开头的常量信息所代表的图片类型。它还包括其它很多类型,这里只是演示了我们平常最常见的 jpg 和 png 类型的图片类型的获取。

它和 getimagesize() 函数返回的第三个属性,也就是下标为 2 的那个属性的内容是一样的,在 getimagesize() 函数中,0 和 1 代表的是宽高,2 代表的就是图片的类型。

var_dump(getimagesize($jpg));// array(7) {//     [0]=>//     int(300)//     [1]=>//     int(244)//     [2]=>//     int(2)//     [3]=>//     string(24) "width="300" height="244""//     ["bits"]=>//     int(8)//     ["channels"]=>//     int(3)//     ["mime"]=>//     string(10) "image/jpeg"//   }

获取完整的 EXIF 信息

图片中完整的所有 EXIF 信息是通过 exif_read_data() 函数来获取的。

var_dump(exif_read_data($png));// PHP Warning:  exif_read_data(1.png): File not supported in /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202011/source/11.使用PHP获取图像文件的EXIF信息.php on line 14// Warning: exif_read_data(1.png): File not supported in /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202011/source/11.使用PHP获取图像文件的EXIF信息.php on line 14// bool(false)var_dump(exif_read_data($jpg));// array(8) {//     ["FileName"]=>//     string(5) "2.jpg"//     ["FileDateTime"]=>//     int(1605061174)//     ["FileSize"]=>//     int(19075)//     ["FileType"]=>//     int(2)// ……// ……

就像前面讲过的,EXIF 信息只在 JPG 、 TIFF 等类型的图片格式中存在,所以 PNG 图片是无法获取到 EXIF 信息的。如果对 PNG 图片使用 exif_read_data() 就会报出警告。而对于 JPG 来说,就会返回完整的全部的 EXIF 内容。这里我们只截取了一部分,本身的内容非常多,不只是宽、高、类型、压缩比率之类的,如果是手机拍摄的还能看到手机厂商、地理位置、快门参数、光圈参数等,当然,这个也和你使用的相机有很大的关系,有的厂家可能就会少一些数据。这个大家可以自己拍张照然后使用这个函数来自己查看一下。

另外,还有一个别名函数 read_exif_data() ,与 exif_read_data() 的功能是类似的,就是它的一个别名,并且在 PHP7 以后就已经标记为过时的语法了。大家可以了解一下。

var_dump(read_exif_data($jpg));// PHP Deprecated:  Function read_exif_data() is deprecated in /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202011/source/11.使用PHP获取图像文件的EXIF信息.php on line 17// Deprecated: Function read_exif_data() is deprecated in /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202011/source/11.使用PHP获取图像文件的EXIF信息.php on line 17// array(8) {//   ["FileName"]=>//   string(5) "2.jpg"//   ["FileDateTime"]=>//   int(1605061174)//   ["FileSize"]=>// ……// ……

获取指定索引的头名称

索引头对应的就是 EXIF 中的字段名称,我们可以查看当前所有支持的索引头信息,内容非常多。也可以根据索引头获得属性名称,然后再到 EXIF 中查找对应的属性信息。

echo "256: " . exif_tagname(256) . PHP_EOL;// 256: ImageWidthfor ($id = 1; $id <= 65535; $id++) {    if (exif_tagname($id) != "") {        echo $id . ' ( ' . exif_tagname($id) . ' )', PHP_EOL;    }}// 11 ( ACDComment )// 254 ( NewSubFile )// 255 ( SubFile )// 256 ( ImageWidth )// 257 ( ImageLength )// 258 ( BitsPerSample )// 259 ( Compression )// ……// ……// ……

读取 JPG 文件中嵌入的缩略图

可能很多人不知道吧,EXIF 中是可以保存一个缩略图的。而且大家的手机拍出来的相片基本都会有这个缩略图存在。Windows 系统中如果图片有缩略图的话也会直接用 EXIF 中的缩略图,如果没有的话,就会自动在目录中生成一个 Thumbs.db 文件,也就是一个缩略图的数据库。

var_dump(exif_thumbnail('../img/3.jpeg'));file_put_contents('../img/3-thumbnail.jpeg', exif_thumbnail('../img/3.jpeg'));

在 PHP 中可以通过 exif_thumbnail() 这个函数直接获取 JPG 文件中 EXIF 里面保存的缩略图信息。在测试代码中我们获取到后再将它保存为正式的图片,大家就可以看到缩略图的真实样子了。并且我们使用 exif_read_data() 来读取这个文件的话,也能看到缩略图保存的信息。

var_dump(exif_read_data('../img/3.jpeg'));// array(56) {// ……// ……// ……//     ["Make"]=>//     string(6) "Xiaomi"//     ["THUMBNAIL"]=>//     array(9) {//       ["JPEGInterchangeFormat"]=>//       int(5504)//       ["Orientation"]=>//       int(6)//       ["JPEGInterchangeFormatLength"]=>//       int(14369)//       ["Compression"]=>//       int(6)//       ["ResolutionUnit"]=>//       int(2)//       ["XResolution"]=>//       string(4) "72/1"//       ["YResolution"]=>//       string(4) "72/1"//       ["ExifImageLength"]=>//       int(240)//       ["ExifImageWidth"]=>//       int(320)//     }//     ["UndefinedTag:0x9AAA"]=>//     string(4480) "1y�L�=w%�s_�&��v��oJ��$Gdz|d�9n�// ……// ……

感谢各位的阅读,以上就是"利用PHP读取到图片的EXIF信息的方法是什么"的内容了,经过本文的学习后,相信大家对利用PHP读取到图片的EXIF信息的方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

信息 图片 文件 类型 属性 内容 函数 图像 就是 文章 方法 博客 手机 索引 也就是 代表 数据 照片 学习 位置 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中小学生网络安全公约照片 交通行业网络安全方案设计收费 视觉认知的信息采集软件开发 向日葵电脑版无法连接服务器 ups安全关闭服务器 武穴实小网络安全宣传 大型软件开发 网络技术专业人才社会需求 怎么看数据库装好没有了 python 内置数据库 如何使用数据库进行创建命令 服务器关闭8080端口有影响吗 网络安全具体做些什么 博图重新启动opcua服务器 dnf西海岸服务器什么时候更新 y-str数据库查询原则 奇迹黄金服务器 网络安全团生会日记 服务器机柜托盘尺寸标准 常用的蛋白质结构数据库 内蒙古互联网软件开发诚信服务 聊城移动的dns服务器是什么 数据库中已存在名为 js 触发服务器控件 北京易用宝网络技术有限公司 邱县软件开发系统 北京沃鲜网络技术有限公司 儿童dna数据库落户 关闭aws密钥管理服务器 安徽军工定时模块服务器虚拟主机
0