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

推荐订阅源

D
DataBreaches.Net
L
LangChain Blog
博客园_首页
J
Java Code Geeks
博客园 - 【当耐特】
Microsoft Azure Blog
Microsoft Azure Blog
小众软件
小众软件
WordPress大学
WordPress大学
V
Visual Studio Blog
T
The Blog of Author Tim Ferriss
U
Unit 42
酷 壳 – CoolShell
酷 壳 – CoolShell
Recent Announcements
Recent Announcements
C
Check Point Blog
IT之家
IT之家
Engineering at Meta
Engineering at Meta
N
Netflix TechBlog - Medium
A
About on SuperTechFans
aimingoo的专栏
aimingoo的专栏
D
Docker
有赞技术团队
有赞技术团队
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
阮一峰的网络日志
阮一峰的网络日志
I
InfoQ

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 日 完成初稿

最近更新

猜你喜欢