Можно ли обрезать изображение с помощью скрипта приложения Google без использования стороннего API - PullRequest
1 голос
/ 04 августа 2020

Я хочу обрезать изображение с помощью Google App Script, если изображение находится вне рамки страницы, но, насколько я проверил в документации Google App Script, я не смог найти способ обрезать изображение. pageElements.asImage().replace (imgBlob, true); не разрешается передавать размеры обрезки в качестве параметров в .replace() для обрезки изображения.

Я знаю, что это может быть достигнуто с помощью настраиваемого API, передавая blob изображения и область кадрирования, которая вызовет обрезку метод на другом сервере.

А вот как можно будет работать с Google App Script, ищу совета специалиста.

введите описание изображения здесь

1 Ответ

4 голосов
/ 05 августа 2020

Как насчет этого ответа?

Проблема:

Я думаю, что на текущем этапе replace(blobSource, crop) имеет ограничение. Официальный документ гласит следующее.

crop Boolean : если true, обрезает изображение, чтобы оно соответствовало размеру существующего изображения. В противном случае изображение масштабируется и центрируется.

Я подтвердил, что при кадрировании изображения с помощью replace(blobSource, crop) центр изображения остается. Похоже, это текущая спецификация. И хотя в Slides API есть «ropProperties »из« UpdateImagePropertiesRequest », к сожалению, на текущем этапе его нельзя использовать. Об этом уже сообщалось. Ref

Пример сценария:

Если вы используете replace(blobSource, crop) в соответствии с текущей спецификацией, как насчет следующего примера сценария? В качестве примера ситуации, 2 изображения «image1» и «image2» подготовлены на 1-м слайде, а «image1» обрезается с использованием «image2».

Последовательность этого скрипта выглядит следующим образом.

Поток:

  1. Получить 2 изображения со слайда в Google Slides.
  2. Обрезать «изображение1» с помощью «изображение2». Таким образом, «изображение2» заменяется на «изображение1».
  3. Переместить обрезанное изображение в «изображение1».
  4. Удалить исходное «изображение1».

Скрипт:

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 остается за кадром.

enter image description here

Note:

  • Slides API and Slides Service are growing now. So I think that this situation might be changed by the future update. But if you want this soon, how about requesting this to the issue tracker as the future request? Ref

Ссылки:

Добавлено:

В дополнительном примере сценария для использования replace(blobSource, crop) я хотел бы предложить метод использования собственного образа. В этом примере сценария, когда изображение выступает, изображение вне страницы удаляется путем обрезки. Метод basi c аналогичен приведенному выше образцу сценария.

Пример сценария:

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

Результат:

введите описание изображения здесь

Примечание:

  • В этом примере скрипта в качестве простого примера я подготовил только правую часть горизонтального направления. Поэтому, если вы хотите удалить вертикальное направление, пожалуйста, измените сценарий для вашей реальной ситуации.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...