是否可以使用谷歌应用程序脚本裁剪图像而不使用任何第三方API

Puz*_*Boy 1 image add-on google-apps-script google-slides

如果图像位于页面框架之外,我想使用 Google App Script 裁剪图像,但据我检查 Google App Script 文档,我找不到裁剪图像的方法。 pageElements.asImage().replace (imgBlob, true);不允许将裁剪尺寸作为参数传递来.replace()裁剪图像。

我知道这可以使用自定义 API 来实现,传递图像 blob 和裁剪区域,以便调用另一台服务器上的裁剪方法。

但是如何使用 Google App Script,寻求专家建议。

在此输入图像描述

Tan*_*ike 5

这个答案怎么样?

问题:

我认为在现阶段,replace(blobSource, crop)是有局限性的。官方文档是这样说的。

crop Boolean:如果为 true,则裁剪图像以适合现有图像的大小。否则,图像将被缩放并居中。

我确认,当使用 裁剪图像时replace(blobSource, crop),图像的中心会留下。看来这是当前的规范。而且虽然Slides API中有“UpdateImagePropertiesRequest”的“cropProperties”,但不幸的是,在现阶段,这个仍然不能使用。这已经被报道过。参考号

示例脚本:

replace(blobSource, crop)如果在当前规范下使用,下面的示例脚本怎么样?作为样本情况,在第一张幻灯片中准备了“image1”和“image2”这两个图像,并且使用“image2”裁剪了“image1”。

该脚本的流程如下。

流动:

  1. 从 Google 幻灯片上的幻灯片中检索 2 张图像。
  2. 使用“image2”裁剪“image1”。由此,“image2”被替换为“image1”。
  3. 将裁剪后的图像移动到“image1”。
  4. 删除原来的“image1”。

脚本:

function myFunction() {
  // 1. Retrieve 2 images from a slide on Google Slides.
  var slide = SlidesApp.getActivePresentation().getSlides()[0];
  var images = slide.getImages();
  var image1 = images[0];  // Red image.
  var image2 = images[1];  // Blue image.
  
  // 2. Crop "image1" using "image2". By this, "image2" is replaced with "image1".
  var replacedImage = image2.replace(image1.getBlob(), true);
  
  // 3. Move the cropped image to "image1".
  replacedImage.setTop(image1.getTop()).setLeft(image1.getLeft());
  
  // 4. Remove the original "image1".
  image1.remove();
}
Run Code Online (Sandbox Code Playgroud)

结果:

运行脚本时,“image1”将被裁剪。但发现在当前阶段,“image1”的中心被裁剪留下了。

在此输入图像描述

笔记:

  • Slides API 和 Slides 服务正在不断发展。所以我认为这种情况可能会在未来的更新中得到改变。但如果您很快就想要这个,那么向问题跟踪器请求这个作为未来的请求怎么样?参考号

参考:

添加:

在使用的附加示例脚本中replace(blobSource, crop),我想提出使用自我图像的方法。在此示例脚本中,当图像伸出时,页面外的图像将通过裁剪被删除。基本方法与上面的示例脚本相同。

示例脚本:

function myFunction() {
  var s = SlidesApp.getActivePresentation();
  var slide = s.getSlides()[0];
  var images = slide.getImages();
  var image = images[0];
  var pageWidth = s.getPageWidth();
  var imagePosition = image.getLeft();
  var imageWidth = image.getWidth();
  var check = imagePosition + imageWidth - pageWidth;
  if (check > 0 && check < imageWidth) {
    image
      .duplicate()
      .setWidth(pageWidth - imagePosition)
      .asImage()
      .replace(image.getBlob(), true);
    image.remove();
  }
}
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

笔记:

  • 在这个示例脚本中,作为一个简单的示例,我只准备了水平方向的右侧。所以当你想去掉垂直方向时,请根据你的实际情况修改脚本。