【问题标题】:Extract width and height from images stored in Google Drive - Google Apps Script从存储在 Google Drive 中的图像中提取宽度和高度 - Google Apps 脚本
【发布时间】:2021-01-25 21:04:06
【问题描述】:

我使用以下脚本来提取 google drive 文件夹中所有图像的图像名称和图像 URL。 它将这些信息提取到谷歌表格文档中。是否可以将图像尺寸(图像高度和宽度)添加到脚本中,以便将其拉入文档中?

脚本:

// replace your-folder below with the folder for which you want a listing
function listFolderContents() {
  var foldername = ‘FolderName1’;
  var folderlisting = 'listing of folder ' + foldername;
  
  var folders = DriveApp.getFoldersByName(foldername)
  var folder = folders.next();
  var contents = folder.getFiles();
  
  var ss = SpreadsheetApp.create(folderlisting);
  var sheet = ss.getActiveSheet();
  sheet.appendRow( ['name', 'link'] );
  
  var file;
  var name;
  var link;
  var row;
  while(contents.hasNext()) {
    file = contents.next();
    name = file.getName();
    link = file.getUrl();

    sheet.appendRow( [name, link] );     
  }  
};

【问题讨论】:

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


    【解决方案1】:

    解释:

    您的目标是检索存储在 Google 云端硬盘中特定文件夹中的图片的 widthheight

    • 此信息位于属性imageMediaMetadata.widthimageMediaMetadata.height 中的imageMediaMetadata

    • 要检索此元数据,您需要启用 Drive API 并将文件的 fileId 作为参数传递:

      Drive.Files.get(fileId).imageMediaMetadata;
      
    • 还将数据存储在数组中并将值直接设置到工作表中,这样您就不必反复使用效率非常低的appendRow

    最后但同样重要的是,最好检查文件是否为image,而不管每个扩展名(jpegpng)。否则,如果文件夹中包含其他类型的文件(电子表格文档等),则会出现错误。

    您可以使用includes() 来检查getMimeType 是否包含单词image

    file.getMimeType().includes("image")
    

    并且仅针对这些文件,找到 widthheight

    解决方案:

    function listFolderContents() {
      var foldername = 'FolderName1';
      var folderlisting = 'listing of folder ' + foldername;
      var folders = DriveApp.getFoldersByName(foldername);
      var folder = folders.next();
      var contents = folder.getFiles();
      var ss = SpreadsheetApp.create(folderlisting);
      var sheet = ss.getActiveSheet();
      var data = [['name', 'link', 'width', 'height']];
    
      while(contents.hasNext()) {
        let file = contents.next();
        if( file.getMimeType().includes("image") ){
          let name = file.getName();
          let link = file.getUrl();
          let fileId = file.getId();
          let dims = Drive.Files.get(fileId, {supportsAllDrives: true}).imageMediaMetadata
          let width = dims.width;
          let height = dims.height;
    
        data.push( [name, link, width, height] );
        }     
      }  
      sheet.getRange(1,1,data.length,data[0].length).setValues(data);
    };
    

    小心!

    确保启用 Drive API来自:

    • 资源 => 高级 Google 服务(旧版编辑器)

    • 服务(新编辑器)

    【讨论】:

    • 您好,感谢您的回复。它出现了一个错误“错误 GoogleJsonResponseException:对 drive.files.get 的 API 调用失败并出现错误:找不到文件:1pkXfeSWPx2-89NeA4Y2un-J2zDdwgxIU listFolderContents @ Code.gs:17 我已启用驱动器 API
    • Resolve a 404 error: File not found: {fileId} The notFound error occurs when the user does not have read access to a file, or the file does not exist. 请确保您对该文件夹中的文件具有读取权限。 @苏菲
    • 我确实拥有完全访问权限,您还有其他想法吗?
    • 查看详情here。无法重现您的问题。我自己在一个新创建的文件夹中测试了代码,我在其中放了一些图像,它工作得非常好。你可以做同样的事情来看看它是否有效。该文件夹是其他人拥有的共享文件夹吗? @苏菲
    • 是的,该文件夹归其他人所有,但我可以访问。使用我发布的原始脚本可以正常工作,但是由于某种原因这个脚本不行。
    【解决方案2】:

    您可以使用ImgApp library 检索 Google Drive 中任何图像文件的宽度和高度。

    var blob = DriveApp.getFileById(fileId).getBlob();
    var res = ImgApp.getSize(blob);
    var width = res.width;
    var height = res.height;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多