Google脚本:如何调整Blob中的图片大小?

时间:2019-11-20 16:08:44

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

我有一个Blob,其中包含一个在Google云端硬盘中远程加载和创建的图像:

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:(

您看到如何解决此问题了吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

通过从请求中获取Blob并将其放在widthheight属性(这些图像的宽度和高度都在其中)中,来调整App脚本中图像的大小。 ,请使用对您最有用的方法)。

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

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

答案 1 :(得分:2)

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

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

问题和解决方法:

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

  1. 将下载的图像创建为文件添加到Google云端硬盘。
  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 :(得分:0)

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