Slides App Scripts - 如何通过保持比例来复制图像 修改点:修改后的脚本:结果:参考:

问题描述

我想使用 Google Slide App Scripts 将第一张幻灯片上的图像复制到另一张幻灯片

为此,在将 blob 插入下一张幻灯片之前,我将图像中的数据作为 blob 获取。问题是,即使我设置了顶部、左侧、宽度和高度的值,我也不明白如何保持相同的比例(在我的情况下,我已经裁剪了图像)。

这是我的代码

function myFunction() {
  
  var slides = SlidesApp.getActivePresentation().getSlides();

  var blop,width,height;

  slides[0].getimages().forEach(function(image){
    if(image.getTitle() == "image") {
      blop = image.getBlob()
      left = image.getLeft()
      top = image.getTop()
      width = image.getWidth()
      height = image.getHeight()
    }
  });

  slides[1].insertimage(blop,left,top,height)
}

你可以在这里看到它的样子: https://docs.google.com/presentation/d/1LlyHNbjcANWspPvJZedW9vgx9c9JHRD-kWOvXkwrDNo/edit?usp=sharing(查看器模式)

当我尝试应用转换时,结果确实不同...

解决方法

修改点:

  • 不幸的是,在当前阶段,似乎在 Slides Service 和 Slides API 中,无法使用图像裁剪。这已经被报道过了。 Ref 所以,我认为在您的情况下,可能需要复制包含裁剪信息的图像。

  • 在您的脚本中,使用了 insertImage(blobSource,left,top,width,height)。在这种情况下,blob 是原始图像。由此,不包括作物信息。我认为这可能是您出现问题的原因。

  • 在这种情况下,我想建议使用 insertImage(image)。该方法的文档如下。

    在页面上插入提供的 Image 的副本。

当以上几点反映到你的脚本中时,它变成如下。

修改后的脚本:

function myFunction() {
  var slides = SlidesApp.getActivePresentation().getSlides();
  slides[0].getImages().forEach(function(image){
    if(image.getTitle() == "image") {
      slides[1].refreshSlide();
      slides[1].insertImage(image);
      slides[1].refreshSlide();
    }
  });
}

结果:

当以上修改后的脚本用于您的示例 Google 幻灯片时,将获得以下结果。

enter image description here

  • 当我测试这个修改后的脚本时,我注意到一个重要的点。使用此脚本时,似乎需要使用 refreshSlide。因为我确认,当不使用refreshSlide时,不包括裁剪和坐标信息的图像被复制。

  • 而且,在我的环境中,在大多数情况下,脚本运行良好。但是,我注意到,当我多次测试时,即使使用refreshSlide,也存在复制不包含裁剪和坐标信息的图像的情况。所以我认为 insertImage(image) 可能有错误。

    • 如果在您的环境中,您遇到了同样的情况,那么向 Google 问题跟踪器报告如何? Ref

参考:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...