首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谷歌脚本:如何在blob中调整图像大小?

谷歌脚本:如何在blob中调整图像大小?
EN

Stack Overflow用户
提问于 2019-11-20 16:08:44
回答 4查看 4.4K关注 0票数 3

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

代码语言:javascript
复制
var response = UrlFetchApp.fetch(fileURL);
var fileBlob = response.getBlob();
var folder = DriveApp.getFolderById('THjgj698979XXXXXXXX');
var result = folder.createFile(fileBlob);

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

关于您的信息,一篇可以帮助我但最终没有真正帮助我的文章:(解释如何调整图像大小,而不是如何在blob中调整图像大小) 在Google脚本中调整图像大小

谢谢

编辑:

我现在就是这么做的。但我有个问题:图像缩小了,但不是我指定的大小.

代码语言:javascript
复制
 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 :(

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

谢谢!

EN

回答 4

Stack Overflow用户

发布于 2019-11-21 23:04:51

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

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

问题和解决办法:

不幸的是,在当前阶段,没有任何方法可以直接调整Google脚本中的图像大小。但是有解决办法。此解决方案的流程如下。

  1. 将下载的图像创建为Google的文件。
  2. 从创建的文件中检索文件元数据。
    • 在这里,检索thumbnailLink

  1. 通过修改thumbnailLink修改创建的图像文件的宽度。
    • thumbnailLink的值类似于https://lh3.googleusercontent.com/###=s220
    • =s220更改时,缩略图的大小也会改变。这个解决方案使用这个。

  1. 从修改后的链接中检索blob。
  2. 将blob创建为图像文件。
  3. 删除时态文件。

示例脚本:

在运行脚本之前,请设置widthoutputFilenameurl的变量。还有,请在高级谷歌服务中启用驱动器API。

代码语言:javascript
复制
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

注意:

  • 不幸的是,在这个解决方案中,不能直接从blob创建调整大小的映像。例如,如果您想要实现这一点,那么使用像转换API的PNG到PNG API这样的外部API如何?
  • 气体库,包括上面的脚本。库珀的评论也提到了这一点。

参考文献:

如果这不是你想要的方向,我道歉。

票数 8
EN

Stack Overflow用户

发布于 2021-10-12 21:59:51

成功地使用了https://github.com/tanaikech/ImgApp。不过,还需要一些额外的演示许可。

README的失窃

代码语言:javascript
复制
var res = ImgApp.doResize(fileId, width);
var width = res.resizedwidth;
var height = res.resizedheight;
DriveApp.createFile(res.blob.setName("filename"));
票数 1
EN

Stack Overflow用户

发布于 2019-11-20 16:51:54

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

但是,看起来您正在试图调整图像的大小,但这应该使用服务器/无服务器功能(可能查看可以插入Google函数的基于节点的调整尺寸工具?)。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58958716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档