判断图片是否为现场照片(Live Photo亦即内含Exif信息)

编程知识 更新时间:2023-05-01 16:31:13

判断图片是否为现场照片(Live Photo亦即内含Exif信息)

一、理论

        1、什么是Exif信息和现场照片

        Exif信息是可以被任意编辑的,因此只有参考的功能。Exif信息以0xFFE1作为开头标记,后两个字节表示Exif信息的长度。所有Exif信息最大为64 kb,而内部采用TIFF格式。

Exif_百度百科可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。Exif最初由日本电子工业发展协会在1996年制定,版本为1.0。1998年,升级到2.1,增加了对音频文件的支持。2002年3月,发表了2.2版。https://baike.baidu/item/Exif?fr=ala0_1_1        当1个图片文件包含Exif信息时,我们称该图片为现场照片,即:Live Photo。

        2、现场照片(iPhone称实况照片)的直观的判断

          1.2.1、右键图片文件,属性,总是包含“照相机”的文件扩展对象的属性信息

         但是,文件的这个扩展对象的属性,是可以被我们认为的修改的,改后可能就抹掉了。你如我们可以用Adobe PhotoShop来更改它,抹掉后,它就不再包含Exif的具体字段信息了;但它仍旧是现场照片(除非你把它转储为Web所用格式,即进行了内存转储),因为格式你改不了的。

        怎么改呢,看看:

https://jingyan.baidu/article/af9f5a2d2f443443140a4590.htmlhttps://jingyan.baidu/article/af9f5a2d2f443443140a4590.html

          1.2.2、当你用记事本强行打开1个现场照片时,它的内容的头部,总是包含Exif  MM字样:

          注意,是“Exif  MM”字样【或“xif  MM”字样(iPhone照片转为jpg后)】,并非“ExifJPEG”格式的压缩字样,因为ExifJPEG它有可能也是一种JFIF文件(JPEG文件内部交换格式),而JFIF文件并非现场照片。

          JPEG/JFIF是万维网(World Wide Web)上最普遍的被用来存储和传输照片的格式。它并不适合于线条绘图(drawing)和其他文字或图标(iconic)的图形,因为它的压缩方法用在这些类型的图形上,得到的结果并不好(PNG和GIF通常是用来存储这类的图形;GIF每个像素只有8比特,并不很适合于存储彩色照片,PNG可以无损地存储照片(iPhone的照片即为PNG无损照片格式),但是文件太大的缺点让它不太适合在网络上传输)。

          PNG和GIF也有可能包含Exif信息,也有可能是现场照片。

          Android手机和华为鸿蒙HarmonyOS现场照片一般用JPEG格式来储存的,而苹果Apple现场照片一般使用PNG格式存储。 

          无论是JPEG、还是PNG或GIF格式的图片,也无论它们是否被第三方软件进行过格式之间的转化,如果它们是现场照片,都有1个共同特征,就是:Exif信息以0xFFE1作为开头标记,后两个字节表示Exif信息的长度。所以Exif信息最大为64 kb,而内部采用TIFF格式。

           比如,iPhone的QQ邮箱app发送其上现场照片(实况照片):

            自动打包为.zip后发送QQ电子邮件 :

 对Exif格式及其信息的特别权限,包括位置信息和Exif元数据信息:

        iPhone的PNG无损现场照片,操作系统邮件-属性-详细信息,是看不到Exif信息的,但:并不代表它不包含Exif信息,并不代表它不是现场照片:

         而Android的JPG有损现场照片或PNG被转化JPG后的的文件不同,操作系统邮件-属性-详细信息,总是能够看到Exif信息的:

             iPhone的QQ邮箱发送后,接收端:

            下载后,用Delphi App打开照片,均会返回一致的Exif信息: 

            无论是JPEG、还是PNG或GIF格式的图片,也无论它们是否被第三方软件进行过格式之间的转化,如果它们是现场照片,都有1个共同特征,就是:Exif信息以0xFFE1作为开头标记,后两个字节表示Exif信息的长度。所以Exif信息最大为64 kb,而内部采用TIFF格式:

二、如何判断图片是否为现场照片

        2.1、有了一、理论的描述,可以取文件头的特征字节

          如果文件流的头部包含有“0xFFE1”,那么它就是内含Exif信息的现场照片,否则就不是。

          在内存中:

          Exif_Buffer特征信息每字节8位表示:000000FF000000E1
          Exif_Buffer特征信息每字节4位表示:00FF00E1

          Exif信息以0xFFE1作为开头标记,后两个字节表示Exif信息的长度。Exif信息最大为64 kb,而内部采用TIFF格式(通用的扫描图像文件的格式)。

        2.2、Delphi编程判断图片是否为照片并提取Exif的详细信息

          (略)。

喜欢的话,就在下面点个赞、收藏就好了,方便看下次的分享:

更多推荐

判断图片是否为现场照片(Live Photo亦即内含Exif信息)

本文发布于:2023-04-23 17:15:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/9bcd5232deb26cf9956bd077e08f9e89.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:亦即   现场   照片   图片   信息

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 99036文章数
  • 25794阅读数
  • 0评论数