You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Google Apps Script中复制粘贴含裁剪信息的图片

解决方案:复制图片裁剪信息并应用到新文档中的PositionedImage

好问题!其实Google Apps Script的Document Service完全支持提取和应用图片的裁剪信息,不管原图片是InlineImage还是PositionedImage,都能通过对应API完美处理。下面是具体的实现步骤和代码示例:

1. 提取原图片的裁剪属性

不管是内嵌图还是定位图,都可以调用getCropProperties()方法获取裁剪信息,这个方法会返回一个CropProperties对象,包含四个核心比例值(范围0-1,0表示无裁剪,1表示完全裁掉对应方向区域):

  • top: 顶部裁剪比例
  • bottom: 底部裁剪比例
  • left: 左侧裁剪比例
  • right: 右侧裁剪比例

示例提取代码:

// 提取原文档中的内嵌图裁剪信息
const inlineImage = sourceDoc.getBody().getImages()[0];
const inlineCropProps = inlineImage.getCropProperties();

// 提取原文档中的定位图裁剪信息
const positionedImage = sourceDoc.getBody().getPositionedImages()[0];
const positionedCropProps = positionedImage.getCropProperties();

2. 在新文档中插入图片并应用裁剪

将图片Blob插入新文档成为PositionedImage后,直接调用setCropProperties()方法传入提取到的裁剪属性对象,就能完美还原原图片的裁剪效果。

完整实现代码:

function copyImagesWithCropPreserved() {
  const sourceDocId = "你的原文档ID";
  const targetDocId = "你的目标文档ID";
  
  const sourceDoc = DocumentApp.openById(sourceDocId);
  const targetDoc = DocumentApp.openById(targetDocId);
  const targetBody = targetDoc.getBody();
  
  // 处理原文档中的内嵌图,转为带裁剪的定位图
  const inlineImages = sourceDoc.getBody().getImages();
  inlineImages.forEach(img => {
    const imgBlob = img.getBlob();
    const cropProps = img.getCropProperties();
    
    // 插入定位图并保留原尺寸(可按需调整位置)
    const newPositionedImg = targetBody.appendPositionedImage(imgBlob)
      .setLeftOffset(50)
      .setTopOffset(50)
      .setWidth(img.getWidth())
      .setHeight(img.getHeight());
    
    // 应用裁剪属性
    newPositionedImg.setCropProperties(cropProps);
  });
  
  // 处理原文档中的定位图,保留位置、尺寸和裁剪
  const positionedImages = sourceDoc.getBody().getPositionedImages();
  positionedImages.forEach(img => {
    const imgBlob = img.getBlob();
    const cropProps = img.getCropProperties();
    
    const newPositionedImg = targetBody.appendPositionedImage(imgBlob)
      .setLeftOffset(img.getLeftOffset())
      .setTopOffset(img.getTopOffset())
      .setWidth(img.getWidth())
      .setHeight(img.getHeight());
    
    newPositionedImg.setCropProperties(cropProps);
  });
  
  targetDoc.saveAndClose();
}

关键注意点

  • 如果原图片没有裁剪,getCropProperties()会返回默认值(四个方向均为0),此时应用裁剪不会有任何变化,无需额外判断。
  • 务必保持新图片的宽高和原图片一致,再配合裁剪属性,就能完全避免变形问题。
  • 确保你拥有原文档和目标文档的编辑权限,否则会抛出权限错误。

内容的提问来源于stack exchange,提问作者Briony Doyle

火山引擎 最新活动