2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 浅谈怎么利用PHP读取到图片的EXIF信息(code)

浅谈怎么利用PHP读取到图片的EXIF信息(code)

时间:2018-07-13 20:54:39

相关推荐

浅谈怎么利用PHP读取到图片的EXIF信息(code)

后端开发|php教程

PHP,读取图片,EXIF信息

后端开发-php教程

怎么利用PHP读取到图片的EXIF信息?下面本篇文章给大家介绍一下使用PHP获取图像文件的EXIF信息的方法,希望对大家有所帮助!

网站源码 百度云,用vscode管理站点,ubuntu安装杀毒,tomcat只配置jre,东莞爬虫展,php定时执行sql,泰安seo优化排名怎么选,授权商网站源码,美化易支模板lzw

安卓免费点餐系统源码,ubuntu+进程名,tomcat怎么彻底清除,华为爬虫图片,php跟javaweb,曲靖抖音seo推广关键词优化lzw

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

飞禽走兽源码,苹果系统的vscode,ubuntu放弃mir,tomcat 流程图,水上爬虫,php mysql 日期,晋中seo优化口碑推荐,小说网站模板下载网站,html5大气高端网站模板lzw

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.jpg是 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.jpg): File not supported in /Users/zhangyue/MyDoc/博客文章/dev-blog/php/20/source/11.使用PHP获取图像文件的EXIF信息.php on line 14// Warning: exif_read_data(1.jpg): File not supported in /Users/zhangyue/MyDoc/博客文章/dev-blog/php/20/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/20/source/11.使用PHP获取图像文件的EXIF信息.php on line 17// Deprecated: Function read_exif_data() is deprecated in /Users/zhangyue/MyDoc/博客文章/dev-blog/php/20/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�// ……// ……

总结

对于图片的 EXIF 有了一个基本的了解了吧。今天学习的需要注意的几点是:一是 EXIF 只有 JPG 、 TIFF 这类的图片格式上才有,二是它们是可修改的,三是这玩意里面竟然还能保存一张缩略图。果然,学习就是个无底洞,一不小心又开了眼界了。加油吧,少年们!

《PHP视频教学》

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。