You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AppScript中InsertImage()函数报错:Invalid image data异常(大尺寸图片问题)

解决AppScript插入大图片时的Invalid image data异常

这个问题是因为Google Docs对插入的图片有像素面积上限(2500万像素),当图片的宽×高超过这个数值时,就会触发Invalid image data错误。

解决方案:插入前自动压缩图片尺寸

添加一个图片尺寸检查与压缩的函数,在获取图片Blob后先处理到允许的范围内,再插入文档。

修改后的完整代码如下:

function replaceTextToImage(body, searchText, image, width) {
  var next = body.findText(searchText);
  if (!next) return;
  var r = next.getElement();
  r.asText().setText("");
  var img = r.getParent().asParagraph().insertInlineImage(0, image);

  if (width && typeof width == "number") {
    var w = img.getWidth();
    var h = img.getHeight();
    img.setWidth(width);
    img.setHeight(width * h / w);
  }
  return next;
}

function getImageLinks(text){
  var linkArray = text.toString().split(", ");
  console.log(linkArray);
  linkArray = linkArray.map(getOnlyId);
  console.log(linkArray);
  return linkArray;
}

// 新增:检查并调整图片尺寸到允许范围
function resizeImageIfNeeded(imageBlob) {
  const MAX_PIXEL_AREA = 25000000;
  const metadata = imageBlob.getAs("image/png").getMetadata();
  const width = metadata.width;
  const height = metadata.height;
  
  if (width * height <= MAX_PIXEL_AREA) {
    return imageBlob;
  }
  
  // 计算缩放比例,确保宽高乘积不超过上限
  const scale = Math.sqrt(MAX_PIXEL_AREA / (width * height));
  const newWidth = Math.floor(width * scale);
  const newHeight = Math.floor(height * scale);
  
  // 转换Blob并调整尺寸
  return imageBlob.getAs(`image/png;resize=${newWidth},${newHeight}`);
}

function replacePhotosBasedOnList(text, listOfPlaceHolders, body, width){
  var listOfLinks = text;
  var count;
 
  if(listOfLinks[0] != ""){
    for (count = 0; count < listOfLinks.length; count++){
      var imageBlob = DriveApp.getFileById(listOfLinks[count]).getBlob();
      // 先处理图片尺寸
      var resizedImage = resizeImageIfNeeded(imageBlob);
      replaceTextToImage(body, listOfPlaceHolders[count], resizedImage, width);
    }
  }
  for(var i = count; i < listOfPlaceHolders.length; i++){
    body.replaceText(listOfPlaceHolders[i], '')
  }
}

关键说明

  • resizeImageIfNeeded函数先获取图片的原始尺寸,计算像素面积是否超限
  • 如果超限,按比例计算新的宽高,确保总面积不超过2500万
  • 通过getAs()方法的resize参数生成压缩后的图片Blob,属于Google Apps Script原生支持的功能,无需额外授权

注意事项

  • 若图片是透明背景的PNG,建议保留image/png格式;若是照片,可换成image/jpeg并添加质量参数(如image/jpeg;quality=80;resize=...)进一步减小文件体积
  • 确保脚本拥有访问Drive文件和处理图片的权限

内容的提问来源于stack exchange,提问作者Isabella Sampaio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:31:13