Google 脚本:如何调整 blob 中的图像大小?

Reg*_*_AG 2 google-app-engine google-apps google-docs-api google-apps-script google-sheets-api

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

var response = UrlFetchApp.fetch(fileURL);
var fileBlob = response.getBlob();
var folder = DriveApp.getFolderById('THjgj698979XXXXXXXX');
var result = folder.createFile(fileBlob);
Run Code Online (Sandbox Code Playgroud)

我想要的是调整此 fileBlob 中包含的图像的大小。我怎样才能做到这一点?

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

谢谢

编辑 :

这就是我现在所做的。但是我遇到了一个问题:图像被缩小了,但不是我指定的尺寸......

 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);
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢 !

Tan*_*ike 5

  • 您想使用 Google Apps 脚本调整下载图像的大小。

如果我的理解是正确的,这个答案怎么样?请将此视为几种可能的答案之一。

问题和解决方法:

不幸的是,在当前阶段,没有直接在 Google Apps Script 中调整图像大小的方法。但是有一个解决方法。此变通方法的流程如下。

  1. 将下载的图像作为文件创建到 Google Drive。
  2. 从创建的文件中检索文件元数据。
    • 在这里,thumbnailLink被检索。
  3. 修改创建的图片文件的宽度thumbnailLink
    • 的值thumbnailLink就像https://lh3.googleusercontent.com/###=s220
    • =s220改变时,缩略图的尺寸也发生了变化。此解决方法使用此方法。
  4. 从修改后的链接中检索 blob。
  5. 将 blob 创建为图像文件。
  6. 删除临时文件。

示例脚本:

在运行脚本之前,请设置widthoutputFilename和的变量url。另外,请在高级 Google 服务中启用 Drive API。

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);
}
Run Code Online (Sandbox Code Playgroud)
  • 当您运行脚本时,在上面的脚本中,会创建一个宽度为 10 像素的图像。高度自动跟随图像的纵横比。
  • 在这种情况下,输出图像的 mimeType 是image/png

笔记:

参考:

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