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

问题描述 投票:0回答:2

如果图像位于页面框架之外,我想使用 Google App Script 裁剪图像,但据我检查 Google App Script 文档,我找不到裁剪图像的方法。

pageElements.asImage().replace (imgBlob, true);
不允许在
.replace()
中将裁剪尺寸作为参数传递来裁剪图像。

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

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

image google-apps-script add-on google-slides
2个回答
5
投票

这个答案怎么样?

问题:

我认为在现阶段,

replace(blobSource, crop)
有局限性。官方文档是这样说的。

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

我确认,当使用

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

示例脚本:

如果在当前规范下使用

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

该脚本的流程如下。

流量:

  1. 从 Google Slides 上的幻灯片中检索 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();
}

结果:

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

注:

  • 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();
  }
}

结果:

注:

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

0
投票

我找到了一个使用这个库进行更灵活裁剪的解决方案,即使对于我这个新手来说,它也可以轻松添加到 AppScript 中:

https://github.com/tanaikech/ImgApp?tab=readme-ov-file#editimage

要使该库正常工作,您还需要该库: https://github.com/tanaikech/DocsServiceApp

并且您需要添加服务(均由 Google 原生提供) 驱动API 幻灯片 API

© www.soinside.com 2019 - 2024. All rights reserved.