【问题标题】:Google script : how to resize image in blob?谷歌脚本:如何调整 blob 中的图像大小?
【发布时间】:2019-11-20 16:08:44
【问题描述】:

我有一个包含在 Google Drive 中远程加载和创建的图像的 blob:

var response = UrlFetchApp.fetch(fileURL);
var fileBlob = response.getBlob();
var folder = DriveApp.getFolderById('THjgj698979XXXXXXXX');
var result = folder.createFile(fileBlob);

我想要的是调整这个 fileBlob 中包含的图像的大小。我该怎么做?

供您参考,一个可以帮助但最终并没有真​​正帮助我的帖子:(解释如何调整图像大小,而不是如何调整 blob 中的图像大小) Resizing image in Google Apps Script

谢谢

编辑:

这就是我现在要做的。但是我遇到了一个问题:图像按比例缩小但不是我指定的大小...

 var response = UrlFetchApp.fetch(fileURL);
    var fileBlob = response.getBlob();
    var folder = DriveApp.getFolderById('THjgj698979XXXXXXXX');
     var docfile = Drive.Files.insert({
    title: "temp",
    mimeType: "application/vnd.google-apps.document",
  }).getId(); 

  var blobImage = DocumentApp.openById(docfile).insertImage(0, fileBlob);

  blobImage.setWidth(10);
  blobImage.setHeight(10);

   var fileBlob2 = blobImage.getBlob();  
  fileBlob2.setName(newFilename); 

  var result = folder.createFile(fileBlob2);

图片从 4000x6000 缩小到 2500x1667。不是 10x10 :(

你知道如何解决这个问题吗?

谢谢!

【问题讨论】:

标签: google-app-engine google-apps-script google-sheets-api google-apps google-docs-api


【解决方案1】:
  • 您想使用 Google Apps 脚本调整下载的图片大小。

如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

问题和解决方法:

不幸的是,在当前阶段,Google Apps 脚本中没有直接调整图像大小的方法。但是有a workaround。此变通方法的流程如下。

  1. 将下载的图像作为文件创建到 Google Drive。
  2. 从创建的文件中检索文件元数据。
    • 在这里,thumbnailLink 被检索到。
  3. 通过修改thumbnailLink来修改创建的图片文件的宽度。
    • thumbnailLink 的值类似于https://lh3.googleusercontent.com/###=s220
    • =s220 更改时,缩略图的大小也会更改。此解决方法使用此方法。
  4. 从修改后的链接中检索 blob。
  5. 将 blob 创建为图像文件。
  6. 删除临时文件。

示例脚本:

在运行脚本之前,请设置widthoutputFilenameurl的变量。还有,please enable Drive API at Advanced Google services.

function myFunction() {
  var width = 10; // Please set the size of width with the unit of pixels.
  var outputFilename = "sample.png"; // Please set the output filename.
  var url = "###";

  var blob1 = UrlFetchApp.fetch(url).getBlob().setName("sampleImage_temporal");
  var fileId = DriveApp.createFile(blob1).getId();
  var link = Drive.Files.get(fileId).thumbnailLink.replace(/\=s.+/, "=s" + width);
  var blob2 = UrlFetchApp.fetch(link).getBlob().setName(outputFilename);
  var file = DriveApp.createFile(blob2);
  Drive.Files.remove(fileId);
}
  • 当您运行脚本时,在上面的脚本中,将创建一个宽度为 10 像素的图像。高度会自动跟随图片的纵横比。
  • 在这种情况下,输出图像的 mimeType 为image/png

注意:

参考资料:

如果这不是您想要的方向,我深表歉意。

【讨论】:

    【解决方案2】:

    成功使用https://github.com/tanaikech/ImgApp。不过需要一些额外的演示权限。

    从 README 中窃取

    var res = ImgApp.doResize(fileId, width);
    var width = res.resizedwidth;
    var height = res.resizedheight;
    DriveApp.createFile(res.blob.setName("filename"));
    

    【讨论】:

      【解决方案3】:

      Apps 脚本中的图像通过从请求中抓取 blob 并将其放置在您正在使用的任何应用程序中来调整大小,并带有 widthheight 属性(这些缩放图像的宽度和高度,只需使用任何一个对你最有用)。

      看起来您正在尝试将图像调整到驱动器文件夹的大小,这应该使用服务器/无服务器功能来完成(也许查看Node-based resize tool,您可以将其推入谷歌云功能?)。

      您也可以尝试创建 Google Doc 并将图像粘贴到文档中,然后 get the image blob 并将其保存到您的文件夹中。

      【讨论】:

        【解决方案4】:

        没有任何 API 调用来调整应用程序脚本上的图像大小,您可以使用第三方服务,如 tinypng 或其他一些服务,因为应用程序脚本上没有任何原生服务。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-30
          • 2013-07-22
          • 2018-05-22
          • 2012-09-07
          相关资源
          最近更新 更多