如何从Drive中的jpeg文件中提取EXIF数据

时间:2015-06-01 20:05:48

标签: google-apps-script google-drive-api

我正在尝试使用Google脚本从位于我的某个Google云端硬盘文件夹中的几个jpeg文件中提取EXIF数据。

更准确地说,我想提取拍摄照片的日期,以及先前使用Adobe Lightroom创建的相关关键字/图像描述。

我知道有几个允许从文件中提取EXIF数据的脚本存在于互联网上,但我没有设法将它们链接起来,或者将它们与我自己的Google脚本一起使用。

我怎么能轻易做到这一点? (我是Google Script的初学者,请尽可能准确)

提前谢谢

1 个答案:

答案 0 :(得分:6)

Google Apps脚本的DriveApp服务无法访问您正在寻找的详细信息,但Advance Drive服务可以访问。

Code.gs

您需要启用高级云端硬盘服务following instructions here

// Demo use of getPhotoExif()
// Logs all files in a folder named "Photos".
function listPhotos() {
  var files = DriveApp.getFoldersByName("Photos").next().getFiles();
  var fileInfo = [];
  while (files.hasNext()) {
    var file = files.next();
    Logger.log("File: %s, Date taken: %s",
               file.getName(),
               getPhotoExif(file.getId()).date || 'unknown');
  }
}

/**
 * Retrieve imageMediaMetadata for given file. See Files resource
 * representation for details.
 * (https://developers.google.com/drive/v2/reference/files)
 *
 * @param {String} fileId    File ID to look up
 *
 * @returns {object}         imageMediaMetadata object
 */
function getPhotoExif( fileId ) {
  var file = Drive.Files.get(fileId);
  var metaData = file.imageMediaMetadata;

  // If metaData is 'undefined', return an empty object
  return metaData ? metaData : {};
}

在Google Drive API中,文件的resource representation包含EXIF数据的属性:

  "imageMediaMetadata": {
    "width": integer,
    "height": integer,
    "rotation": integer,
    "location": {
      "latitude": double,
      "longitude": double,
      "altitude": double
    },
    "date": string,
    "cameraMake": string,
    "cameraModel": string,
    "exposureTime": float,
    "aperture": float,
    "flashUsed": boolean,
    "focalLength": float,
    "isoSpeed": integer,
    "meteringMode": string,
    "sensor": string,
    "exposureMode": string,
    "colorSpace": string,
    "whiteBalance": string,
    "exposureBias": float,
    "maxApertureValue": float,
    "subjectDistance": integer,
    "lens": string
  },