当前位置: 首页 > 后端技术 > PHP

使用PHP获取图片文件的EXIF信息

时间:2023-03-30 03:52:39 PHP

在我们拍摄的照片和各种图片文件中,其实都有一些不能直观看到的信息,比如手机拍照时的位置信息,类型图片的大小、大小等,这些信息称为EXIF信息。一般JPG、TIFF等图像文件都会有这样的信息。EXIF其实就是专门为这类数码照片定制的,专门用来记录数码照片的属性信息和拍摄数据,最初是由日本制定的。这其实很容易理解。日本基本上垄断了相机行业,这样的标准当然是他们制定的!EXIF在Windows系统中有原生支持。右击图片打开菜单,然后点击属性,切换到详细信息,可以直接看到图片文件的EXIF信息。由于这些信息可以随意编辑,所以可以作为一些参考,而不能作为一些功能属性的确定值来获取。例如,EXIF中的宽度和高度等信息不应完全信任。获取EXIF中的图片类型信息首先我们通过EXIF查看图片类型。var_dump(exif_imagetype($png));//int(3)echoexif_imagetype($png)==IMAGETYPE_PNG?$PNG。'是PNG图像':$png。'不是PNG图像',PHP_EOL;//../img/1.png是PNG图像var_dump(exif_imagetype($jpg));//int(2)echoexif_imagetype($jpg)==IMAGETYPE_JPEG?$jpg。'是一张jpg图像':$jpg。'notaJPGimage',PHP_EOL;//../img/2.jpg是一个jpg图像。直接使用exif_imagetype()函数会返回一个图像类型常量,即以IMAGETYPE_开头的常量信息所代表的图像类型。它还包括许多其他类型,这里只是演示获取最常见的jpg和png图像类型。与getimagesize()函数返回的第三个属性相同,即下标为2的属性。在getimagesize()函数中,0和1代表宽高,2代表图片大小。类型。var_dump(getimagesize($jpg));//数组(7){//[0]=>//int(300)//[1]=>//int(244)//[2]=>//int(2)//[3]=>//string(24)"width="300"height="244""//["bits"]=>//int(8)//["通道"]=>//int(3)//["mime"]=>//string(10)"image/jpeg"//}获取完整的EXIF信息图片中所有完整的EXIF信息为通过exif_read_data()函数获取。var_dump(exif_read_data($png));//PHPWarning:exif_read_data(1.png):/Users/zhangyue/MyDoc/blogarticle/dev-blog/php/202011/source/11不支持文件。使用PHP获取图片文件的EXIF信息.phponline14//Warning:exif_read_data(1.png):Filenotsupportedin/Users/zhangyue/MyDoc/blogarticle/dev-blog/php/202011/source/11.使用PHP获取图片文件的EXIF信息.php第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));//PHPDeprecated:Functionread_exif_data()isdeprecatedin/Users/zhangyue/MyDoc/blogarticle/dev-blog/php/202011/source/11.使用PHP获取图像文件Information.php的EXIFonline17//Deprecated:Functionread_exif_data()isdeprecatedin/Users/zhangyue/MyDoc/blogarticle/dev-blog/php/202011/source/11.使用PHP获取图片文件的EXIF信息.phponline17//array(8){//["FileName"]=>//string(5)"2.jpg"//["FileDateTime"]=>//int(1605061174)//["FileSize"]=>//...//...获取指定索引的标头名称。索引头对应于EXIF中的字段名。我们可以查看目前支持的所有索引头信息,内容非常多。也可以根据索引头得到属性名,然后在EXIF中查找对应的属性信息。回声“256:”。exif_t??agname(256)。PHP_EOL;//256:ImageWidthfor($id=1;$id<=65535;$id++){if(exif_t??agname($id)!=""){echo$id.'('.exif_t??agname($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_t??humbnail('../img/3.jpeg'));//string(14369)"??????//!"$??@"????//}!1AQa"q2??#B??R??$3br??//%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz????????????????????????????????????????????????????......"2B????#3R??br??//$4??%??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz????????????????????????????????????......????//?b?????????????j??2file_put_contents('../img/3-thumbnail.jpeg',exif_t??humbnail('../img/3.jpeg'));在PHP中可以通过exif_t??humbnail()函数直接获取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??//??????~??+9????2V:+????Qn]??2?????U??nwF??w;f??k????i*w??bd+??D0??=\o??y????x\??,??BS??#/d??9????//,%C??3????eIZ~????????oL??????????}#??y:4?}???d?GI*Y????//??m??)??x#a??6J?7??骨G?T&,.Ie?%?//???S????§??9??6s??8LT&o//Vn????R??c6???p??G??f#??/??o????_??@??$??%#//??????5v??~?????)??a??i??:??\??}??3xKM??CIe????5&??/????GapR??+??He??}????b??я??//...//...//...总结我对图片的EXIF有了一个基本的了解吧?需要的点今天学习要注意的是:1、EXIF只有JPG、TIFF等图片格式才有,二是可以修改,三是这个东西可以保存缩略图,果然学习是个无底洞坑了,不小心又开了眼界。加油,孩子们!测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/202011/source/11。使用PHP获取图片文件的EXIF信息。PHP参考文档:https://www.php。net/manual/zh/book.exif.phphttps://baike.baidu.com/item/Exif/422825?fr=aladdinhttp://www.360doc.com/content/13/0223/14/9290626_267432131.shtml可在各媒体平台搜索【硬核项目经理】