我正在尝试将Google云端硬盘文件夹中的所有图像插入Google文档。但是在insertImage上,我总是收到“无效的图像数据”错误。
function myFunction() {
var folder = DriveApp.getFolderById(id);
var files = folder.getFiles();
while (files.hasNext()) {
var file = files.next();
var img = file.getBlob();
var imgDoc = DocumentApp.getActiveDocument().getBody().insertImage(0, img);
}
}
有许多示例说明了如何执行此操作,并且所有人都说要获取图像斑点并将其插入。这段代码中是否存在某些错误的图像斑点?
答案 0 :(得分:2)
这个答案怎么样?
根据我的实验,在电子表格中,当insertImage()
在班级表中插入图片时,限制是由于图片区域(像素^ 2)而不是图片的文件大小。可以插入的最大图像区域为1,048,576像素^ 2。 Ref
从这种情况出发,我认为您的问题还与电子表格的情况有关。类insertImage()
中的限制可能是由于图像的区域。所以我做了如下实验。
可以插入以下尺寸的图像。
以下尺寸的图像无法插入。
结果,发现区域限制为25,000,000像素^ 2。
在您的情况下,共享图像的图像尺寸为6240像素x 4160像素。该区域是25,958,400像素^ 2。该区域大于以上实验获得的值(25,000,000像素^ 2)。这样,可以认为是发生了错误。
为了避免此限制,该解决方法如何?在这种解决方法中,当图像大小大于25,000,000像素^ 2时,将使用Drive API减小图像大小。修改后的脚本如下。
function myFunction() {
var folder = DriveApp.getFolderById(id);
var files = folder.getFiles();
while (files.hasNext()) {
var file = files.next();
var img = file.getBlob();
// --- Following script was added.
var url = "https://www.googleapis.com/drive/v3/files/" + file.getId() + "?fields=imageMediaMetadata(height%2Cwidth)%2CthumbnailLink&access_token=" + ScriptApp.getOAuthToken();
var res = UrlFetchApp.fetch(url).getContentText();
var obj = JSON.parse(res);
if (obj.imageMediaMetadata && (obj.imageMediaMetadata.width * obj.imageMediaMetadata.height) > 25000000) {
var width = 1000;
var tlink = obj.thumbnailLink.replace(/=s\d+/, "=s" + width);
img = UrlFetchApp.fetch(tlink).getBlob();
}
// ---
var imgDoc = DocumentApp.getActiveDocument().getBody().insertImage(0, img);
}
}
var width = 1000
。