GetBlob()导致"无效的图像数据。"错误。Google Apps脚本 [英] getBlob() causing "Invalid image data." Error. Google Apps Script

查看:21
本文介绍了GetBlob()导致"无效的图像数据。"错误。Google Apps脚本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的目标是。

  1. 从Google文档获取Base64图像字符串
  2. 将其作为映像保存到驱动器
  3. 从图像获取BLOB并将新图像插入到与真实图像相同的文档中。
function getImage(doc) {
    var tempBase64 = doc.getBody().getParagraphs()[doc.getBody().getParagraphs().length - 1].getText();
    var base64 = tempBase64.replace("data:image/svg+xml;base64,", "");
    var decoded = Utilities.base64Decode(base64);
    return decoded;
}

function run() {
    var doc = DocumentApp.getActiveDocument();
    var img = getImage(doc); //returns decoded blob
    var body = DocumentApp.getActiveDocument().getBody();
    //gets the name of the current doc
    var filename = DriveApp.getFileById(DocumentApp.getActiveDocument().getId());
    var blobImg = Utilities.newBlob(img, MimeType.SVG, filename);
    var currentFolder = DriveApp.getFolderById("1UuP2vZNXLVtgrZxAHLSNZUqVnx0xeSgW");
    //saves image as same name
    var newimg = currentFolder.createFile(blobImg).getId();
    //wait for image to save
    Utilities.sleep(5 * 1000);
    // get blob 
    var blob = DriveApp.getFileById(newimg).getBlob();
    var cursor = doc.getCursor();
    if (cursor) {
    //insert in to doc
        cursor.insertInlineImage(blob);
    }

}

function onOpen() {
    run();
}
当前它正在读取文档并获取Base64字符串✓ 例如:

image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB3aWR0aD0iMTIiIGhlaWdodD0iMTUiPjxwYXRoIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2U9InJnYigwLCAwLCAxMzkpIiBmaWxsPSJub25lIiBkPSJNIDEgMyBsIDEgNCIvPjxwYXRoIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2U9InJnYigwLCAwLCAxMzkpIiBmaWxsPSJub25lIiBkPSJNIDggMSBsIDEgMSIvPjxwYXRoIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2U9InJnYigwLCAwLCAxMzkpIiBmaWxsPSJub25lIiBkPSJNIDMgMTAgYyAwLjAyIDAuMDcgMC4zMSAzLjU0IDEgNCBjIDAuODQgMC41NiAzLjg5IDAuNDcgNSAwIGMgMC44IC0wLjM0IDIgLTMgMiAtMyIvPjwvc3ZnPg==

正在将其保存为特定文件夹✓中的图像

它返回新图像的ID。✓

它正在以Blob✓的形式获取图像

在插入图像时,我得到的图像数据无效。(第20行,文件和代码)。真的不知道该如何解决。有人帮忙吗?

推荐答案

我认为您的脚本是正确的。只有一个问题。在当前阶段,MimeType为image/svg+xml的图片还不能直接插入到Google文档中。因此需要将SVG图像转换为其他MimeType。在此修改中,我使用Drive API转换为image/png。此外,还有几个不是Google API的API,用于将SVG转换为其他API。我认为在您的情况下有几个变通办法。因此,请将此视为其中之一。

修改点:

  • 从创建的文件中检索文件ID,并使用Drive API检索缩略图链接。
  • 调整链接图片大小后,取回PNG图片斑点。
    • 已经发现,通过修改=s###的查询参数,可以修改图片的大小。我用了这个。Ref
  • 将PNG Blob放入文档。

修改后的脚本:

在此修改的脚本中,run()被修改。请确认以下修改后的脚本。

function run() {
  var doc = DocumentApp.getActiveDocument();
  var img = getImage(doc); //returns decoded blob
  var body = DocumentApp.getActiveDocument().getBody();
  //gets the name of the current doc
  var filename = DriveApp.getFileById(DocumentApp.getActiveDocument().getId());
  var blobImg = Utilities.newBlob(img, MimeType.SVG, filename);
  var currentFolder = DriveApp.getFolderById("1UuP2vZNXLVtgrZxAHLSNZUqVnx0xeSgW");
  //saves image as same name
  var newimg = currentFolder.createFile(blobImg).getId();
  //wait for image to save
  Utilities.sleep(5 * 1000);
  // get blob

  // --- Added --- Begin
  var width = 300; // width of the image. A value of 300 pixels was used as a sample.
  var url = "https://www.googleapis.com/drive/v3/files/" + newimg + "?fields=thumbnailLink&access_token=" + ScriptApp.getOAuthToken();
  var link = JSON.parse(UrlFetchApp.fetch(url).getContentText()).thumbnailLink.replace(/=sd+/, "=s" + width);
  var blob = UrlFetchApp.fetch(link).getBlob();
  // --- Added --- End

  var cursor = doc.getCursor();
  if (cursor) {
  //insert in to doc
      cursor.insertInlineImage(blob);
  }
}

注意:

  • Drive API无法获取SVG图像的宽度和高度。因此,在此修改中,我使用了恒定宽度。
  • 我觉得在您的脚本中,可以使用Drive API。但如果出现与API相关的错误,请在API控制台启用Drive API。

参考:

如果这不是您想要的结果,我表示歉意。

这篇关于GetBlob()导致"无效的图像数据。"错误。Google Apps脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆