惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
Y
Y Combinator Blog
博客园 - Franky
D
Docker
B
Blog RSS Feed
M
MIT News - Artificial intelligence
雷峰网
雷峰网
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
宝玉的分享
宝玉的分享
S
SegmentFault 最新的问题
GbyAI
GbyAI
Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MyScale Blog
MyScale Blog
B
Blog
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
Vercel News
Vercel News
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News

Fooleap's Blog

渴望理想 | Fooleap's Blog 19 年底一些事 | Fooleap's Blog 藉秋风,跑起来 | Fooleap's Blog 一个人去跑步 | Fooleap's Blog 8 月的跑量仿佛是那暑假的作业 | Fooleap's Blog 三伏天跑步那么难受,为何还要跑? | Fooleap's Blog 解决小程序开发“当前系统代理不是安全代理” | Fooleap's Blog 忘却配速的夏日跑步 | Fooleap's Blog 六月天时“带水”跑步更爽 | Fooleap's Blog 出来混迟早要还的 | Fooleap's Blog 跑步不能当饭吃 | Fooleap's Blog 将京东移动端详情页链接转为 PC 端 | Fooleap's Blog 不是热就是雨 | Fooleap's Blog 这半月,我跑了 11 个 520 | Fooleap's Blog 跑完流汗一时爽,一直流汗一直爽 | Fooleap's Blog 初夏夜跑 | Fooleap's Blog Electron 中打开 QQ 临时会话 | Fooleap's Blog 春节期间的培隆角 | Fooleap's Blog 从春天跑到夏天 | Fooleap's Blog 晨雾中奔跑 | Fooleap's Blog 漫步春雨中 | Fooleap's Blog 跑在木棉花下 | Fooleap's Blog 我在春节依然坚持跑步 | Fooleap's Blog 伴随着日出跑步 | Fooleap's Blog 没有最好,只有更好 | Fooleap's Blog 电子气温计 | Fooleap's Blog 渡亭小学的金凤花 | Fooleap's Blog 随心而跑 | Fooleap's Blog 2018 跑步小结 | Fooleap's Blog 在 gVim 中使用“非等宽字体” | Fooleap's Blog
利用七牛 API 显示照片的 Exif | Fooleap's Blog
fooleap · 2015-12-04 · via Fooleap's Blog

常访问鄙人博客的朋友,将鼠标覆盖到博客中的某一张图片时,会看到上方会显示该照片的拍摄日期、器材、曝光数据等,看起来好像有点意(zhuāng)思(bī),我就是相片拍得那么烂也好意思晒数据,因为总感觉缺点什么。

那些数据都源于该照片的 Exif,Exif 是专门为数码照片所设定的,可以记录数码照片的属性信息及拍摄数据。Exif 可以嵌入在 JPEG 等文件中,用数码相机或者手机拍摄的照片文件,一般附加有 Exif 数据。

如果是本地的照片文件,很多图片浏览器都有查看图片 Exif 数据的功能,例如 IrfanView。如果是在线的图片呢?Chrome 使用 EXIF Viewer 扩展可以在鼠标划过的时候显示 Exif 信息,Firefox 的 Exif Viewer 扩展则是通过右键菜单可查看。不过在线的图片有些是用户后期处理没保留 Exif,有些则被网站处理过,相当多的图片其实已经不包含 Exif 数据,鄙人觉得这些扩展并不是很实用。

有些照片存储分享平台或摄影社区,如 Flickr、图虫等,在展示相片的同时,会在旁边附上处理过的 Exif 数据信息,以方便网友参考,带去启发,拍出好片。

那么,在个人网站或者博客上面,应该如何显示这些信息比较好?

exif-js[1] 是一个提供读取相片 Exif 数据功能的 JS 库,兼容现代浏览器。GitHub 上有例子,这个就不展开讲,因为还有更加方便的方法。

鄙人多次提及的七牛,其 API 可以很轻松地获取到图片的 Exif 信息[2],所以使用七牛做图床,读取到相关的信息很方便。

直接在图片 URL 后加 exif 指示符即可获取到相关 JSON 字符串,例如:

金鸿路上的风景 金鸿路上的风景

以上相片的 Exif 数据如下:

https://source.fooleap.org/show-exif-data-of-photo.jpg?exif

鄙人所取的那几个数据,对应格式化后如下:

{
  "DateTimeOriginal": {
    "val": "2012:08:01 07:48:12",
    "type": 2
  },
  "ExposureTime": {
    "val": "1/400 sec.",
    "type": 5
  },
  "FNumber": {
    "val": "f/8.0",
    "type": 5
  },
  "FocalLength": {
    "val": "4.3 mm",
    "type": 5
  },
  "ISOSpeedRatings": {
    "val": "200",
    "type": 3
  },
  "Model": {
    "val": "Canon IXUS 220HS",
    "type": 2
  }
}

将以上数据取出来显示在网页里,可以用 JavaScript 实现,若 HTML 如下:

<img src="https://source.fooleap.org/show-exif-data-of-photo.jpg_640" data-url="//source.fooleap.org/show-exif-data-of-photo.jpg_640" data-src="//source.fooleap.org/show-exif-data-of-photo.jpg" id="photo" />

那么 JavaScript 可以这么写:

var xhrExif = new XMLHttpRequest();
xhrExif.open('GET', 'https://source.fooleap.org/show-exif-data-of-photo.jpg?exif', false);
xhrExif.send(null);
var exif = JSON.parse(xhrExif.responseText);
if (xhrExif.readyState == 4 && xhrExif.status == 200) {
  datetime = exif.DateTimeOriginal.val.split(/\:|\s/);
  date = datetime[0] + '-' + datetime[1] + '-' + datetime[2];
  model = (exif.Model) ? (exif.Model.val) : '无';
  fnum = (exif.FNumber) ? (exif.FNumber.val.split(/\//)[1]) : '无';
  extime = (exif.ExposureTime) ? (exif.ExposureTime.val) : '无';
  iso = (exif.ISOSpeedRatings) ? (exif.ISOSpeedRatings.val.split(/,\s/)[0]) : '无';
  flength = (exif.FocalLength) ? (exif.FocalLength.val) : '无';
  document.getElementById('photo').insertAdjacentHTML('afterend', '<div id="exif">日期: ' + date + ' 器材: ' + model + ' 光圈: ' + fnum + ' 快门: ' + extime + ' 感光度: ' + iso + ' 焦距: ' + flength + '</div>');
}

具体的实例见 http://runjs.cn/detail/b4q6pvet

所用到的主要知识点可以看看阮一峰的 Ajax 教程[3],使用 jQuery 或许会更加方便一点。而具体用到博客上,需要考虑的可能更多,这里就不多说了,有兴趣可以查看源码,欣赏鄙人写的那蹩脚的 JS。

参考资料

扩展阅读

本文历史

  • 2015 年 12 月 04 日 完成初稿

最近更新

猜你喜欢