首页 体育 教育 财经 社会 娱乐 军事 国内 科技 互联网 房产 国际 女人 汽车 游戏

微信原图到底在救人,还是在泄露隐私?取决于你怎么用!

2019-12-18

@ Jefferson Palomique

最近又看到有人在评论,微信原图走漏隐私的工作。原因好像是有人在交际媒体上发布了一张相片,然后被网友定位到详细的日子规模,乃至直接定位到寓居的小区,楼层门牌号等信息,想想仍是很可怕的。

在这个事情中的「网友定位」进程,其实很大一部分信息来自相片内容自身走漏的信息。各种警匪片咱们应该也看过,专业人士能够经过一张相片分分出许多有用的信息,例如从窗户阳光的晒入视点,就能够分分出房间的朝向,有一些镜面的反光,也能够剖析摄影环境的更多信息等等。

但这儿提到微信原图露出的信息,其实便是咱们摄影时,在相片中带着的 Exif 信息 。这个 Exif 信息是相机在摄影时,专门记载的一些特点信息和摄影数据。例如 GPS 定位数据、摄影时间、摄影时相机的方向等。

Exif 信息仅仅摄影图片文件的固有信息,不但微信原图共享,其实你经过任何办法,将源文件共享出去,都是会带着这些信息。但其间 GPS 涉及到定位,而定位信息又是一个在某些人看来,比较「灵敏」的信息。

为什么说是某些人呢?图片带着的定位信息,露出出去的确可能会形成困扰,可是某些时间,这又是能够救命的,例如《 民警巧用图片定位,挽救上圈套 CX 安排受害人 》之类的新闻,我想咱们应该也看过。别的也有许多人反映,不运用原图会导致接纳到的图片含糊,这也是一部分人偏心发送「原图」的原因。

一边的确有隐私维护的需求,另一边也有发送无损原图的需求。 微信是怎样处理的呢? 在发送图片的时分,供给了一个「原图」的选项,将是否发送图片源文件的选择权,交到了用户自己的手里。值得一提的是,微信发送图片,为了传输功率以及隐私的考虑,默许是发送紧缩后的图片的,在紧缩的进程中,会整理 EXIF 信息,所以假如你找不到「原图」的选项,那么就阐明这儿只支撑发送「紧缩图」,例如微信朋友圈。

到这就明晰了, 所谓微信原图走漏的隐私,仅仅图片在摄影时存入的固有信息 EXIF,而只需经过处理 EXIF 信息就会被抹去。所以假如想对方接纳到 EXIF 信息,就发送原图,反之则能够经过紧缩处理一下再发送 。

本来到这儿就算完了,不过作为一个技能向的大众号,咱们再持续科普一下相片 EXIF 信息以及在 Android 开发时怎么读取和修正它。

Exif标明 可交换图像文件格局 ,是专门记载数码相机摄影时的一些参数,例如定位信息、摄影设备方向、曝光、颜色等信息,并将这些信息写入图片文件中,以确保在传输时保存这些信息。

Exif 能够被附加到 JPEG、TIFF、RIFF 等文件中,简略来说,图片文件中有一块特别的区域,能够寄存一些额定的 Exif 信息,以确保咱们在运用图片时更便利。

这自身没什么害处,除了 GPS 定位信息会让咱们灵敏之外,其他信息更多的是为了辅佐咱们运用。例如前面提到的摄影相片时,设备的方向信息,就能够确保不管咱们摄影时,手机的方向是侧着的或许是倒着的,摄影后在相册中预览时,永久坚持正着的原因。

一般的图片处理软件,都能够读取出图片的 Exif 信息,而且支撑修正。随意找一个在线检查 Exif 信息的东西网站,就能够检查到我上传图片的 Exif 信息。

图片的 Exif 信息,没有任何的维护,咱们能够对其恣意的修正。可是这些信息你也看到了,没有修正的含义,一般便是紧缩时直接抹去。

紧缩会损失掉 Exif 信息,这也便是为什么在不发送原图的时分,接纳者是读取不到 Exif 信息的。这很好了解,以现在图片手机摄像头支撑的像素来说,一张大画幅的相片,随随意便便是上十 MB 乃至几十 MB,这对发送的网络和存储都是有压力的,所以一般 App 的做法是在发送前,本地做一次图片紧缩。

前面提到,Exif 信息会记载摄影时,摄影设备持握的方向,例如有时咱们会将手机倒过来拍全身照。这相片在相册展现时,永久都是正确的方向,我不会得到一个头朝下的相片。

这就要提到图片紧缩时的战略,咱们就拿 Android 下比较知名的开源图片紧缩库 Luban 举例,Github 上许多图片紧缩库都是学习或许引用它来完结的。

在 Luban 的 Engine.java 文件中,能够找到相关的代码,逻辑很简略,便是在紧缩前,先将图片依照 Exif 中记载的方向,旋转后再进行处理。

这也便是为什么图片紧缩时,尽管抹去了 Exif 信息,可是图片显现的方向依然是正确的原因。

保存 Exif 信息这种需求,我的确想不到有什么场景需求在紧缩后,保存此信息的。

可是假如有必要的话,最简略的处理办法,便是在紧缩前,将图片的 Exif 读取存储,紧缩后再写入图片中。

那么这就又涉及到,咱们怎么编码读取和写入图片的 Exif 信息。

在 Android 中,需求 ExifInterface 来读取 Exif 信息,假如你直接在 AS 中查找这个类,能够发现在 android.media 包下,的确有一个 ExifInterface ,可是我不主张运用它。

自从 Android Support 25.1.0 开端,又添加了一个新的支撑库: ExifInterface 。这是由于 Android 7.1 对 ExifInterface 做了严重修正,因而主张运用此 Support 包,它最低支撑到 Api 9+。

跟着 AndroidX 的发布,对 ExifInterface 也做了搬迁支撑,只不过现在的版别仍是 Beta01。

运用办法并没有什么太大的差异,彻底取决于你项目的要求,这儿举例就运用最新的 28.+ 了

api com.android.support:exifiinterface:28.+ 

Support 包和 android.media 中的 ExifInterface 根本操作,都是相似的,都供给了对指定图片的 Exif 信息进行读写的功用,差异在于 Support 包中包含了 140 多个不同的特点,而其间近 100 个是 android 7.1 中新增的。

ExifInterface 存在两个结构函数,能够传递一个图片文件途径或许图片的 InputStream。

它们之间有些差异:

1、运用 InputStream 取得的 ExifInterface 无法被修正,而直接读取的图片文件,则能够修正。

2、ExifInterface 无法处理远端的 InputStream,例如是从 HttpURIConnection 回来的输入流,所以这儿主张运用 content:// 或许 file:// 这种 Uri 途径。

取得 ExifInterface 目标之后,就能够对其进行操作。

大多数的 Exif 特点,只需求视状况运用 getAttributeInt 、 getAttributeDouble 、 getAttribute 。它们别离标明不同类型的特点。这些办法接纳一个 String 类型的参数,这些参数都以常量的办法,以 TAG_Xxx 为最初,被符号在 ExifInterface 中。

详细想知道不同的 TAG_Xxx 需求运用什么办法获取,能够直接看文档。

其间注释就现已符号了该特点代表的类型。

下面举个最常见的比如,获取图片的摄影方向,用于在显现的时分进行旋转。

当然,还有一些其它比较重要的信息,例如谣传微信原图露出的方位信息,能够经过 getLatLong 办法获取到一个 float 的数组,别离标明经度和维度, getAltitude 获取摄影的海拔高度,单位是 米 。还有一些图片,假如自带缩略图,能够运用 getThumbnail 办法获取到。更多操作,详见代码文档,这儿就不逐个举例了。

需求留意的是,Exif 是一个不谨慎的数据,它不存在任何有必要的符号字段,每个符号字段值,都是可选的,所以咱们在读取的时分,一定要考虑读取时的反常处理。

ExifInterface 其实是不可信的,它只能作为一个参阅。由于任何程序都能够对它进行修正。

修正 Exif 信息能够运用 setAttribute 办法,它接纳一个 key-value 的键值对。用于符号待修正的 Tag 和终究修正后的值。在修正完结之后,还需调用 saveAttributes 办法,否者不会将设置的 Exif 信息写入到图片文件中。

还有一点需求留意,尽管文档中标明,Exif 信息是一个弱校验的数据,可是它对 TAG 的值是有要求的,假如不是它自身界说的值,保存并不会报错,可是读取的时分,会回来 null 。

对 Exif 的运用,这儿就不独自举例了,有爱好能够看看我之前的文章《 Android 读取 Exif 示例 》

到这儿你应该就清楚了,微信原图走漏的仅仅照相机 App 在摄影时,对图片写入的固有信息,并没有什么太多的隐秘,这些信息在图片紧缩时就会被抹去。

最终再总结一下:

图片在摄影时,会写入 Exif 信息到图片文件中,直接发送文件会保存此信息。

99% 的图片紧缩,都会抹去 Exif 信息。

Android 下读取 Exif 信息,能够运用 ExifInterface。

本文对你有协助吗? 留言、转发、点美观 是最大的支撑,谢谢!

「 联机圆桌 」:point_left:引荐我的常识星球,一年 50 个优质问题,上桌联机学习。

大众号后台回复生长『 生长 』,将会得到我预备的学习材料。

热门文章

随机推荐

推荐文章