Как скачать Google Slides в виде изображений?

Я большой поклонник использования Google Slides в качестве облачной облегченной замены иллюстратора (который также оказывается бесплатным и совместным!). Я написал несколько мыслей о своем процессе здесь:

https://medium.com/@tomcritchlow/how-to-use-google-slides-as-a-free-cloud-hosted-illustrator-replacement-f472e6c3a881

Что я пытаюсь сделать в своем рабочем процессе, так это загрузить сразу все слайды презентации в виде изображений? Пользовательский интерфейс Google Slides позволяет загружать каждый слайд только в формате PNG по одному?

Возможно ли это каким-то образом с использованием надстроек или скриптов приложений? Не уверен, с чего начать ... Спасибо!


person tomcritchlow    schedule 27.07.2015    source источник
comment
Спасибо за совет в посте о том, что размер слайда можно настроить в пиксельном формате. Не уверен, что подход, который я предлагаю ниже, можно улучшить с помощью этого решения, чтобы потребовать более низкого разрешения.   -  person savolai ᯓ    schedule 13.01.2018


Ответы (7)


Для меня сработало следующее:

Настраивать

В разделе Ресурсы> Проект консоли разработчика> Просмотр консоли разработчика включите как Slides API, так и Drive API.

Исполнение

Замените идентификатор, взятый из URL-адреса слайдов, в функции start() и запустите его, например:

https://docs.google.com/presentation/d/<id>/edit

и функция сохранит PNG на ваш диск. Это можно расширить, чтобы сгруппировать их все в определенной папке и т. Д.

function downloadPresentation(id) {
  var slideIds = getSlideIds(id); 

  for (var i = 0, slideId; slideId = slideIds[i]; i++) {
    downloadSlide('Slide ' + (i + 1), id, slideId);
  }
}

function downloadSlide(name, presentationId, slideId) {
  var url = 'https://docs.google.com/presentation/d/' + presentationId +
    '/export/png?id=' + presentationId + '&pageid=' + slideId; 
  var options = {
    headers: {
      Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
    }
  };
  var response = UrlFetchApp.fetch(url, options);
  var image = response.getAs(MimeType.PNG);
  image.setName(name);
  DriveApp.createFile(image);
}

function getSlideIds(presentationId) {
  var url = 'https://slides.googleapis.com/v1/presentations/' + presentationId;
  var options = {
    headers: {
      Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
    }
  };
  var response = UrlFetchApp.fetch(url, options);

  var slideData = JSON.parse(response);
  return slideData.slides.map(function(slide) {
    return slide.objectId;
  });
}

function start() {
  downloadPresentation('Slides document id')
}
person Bardy    schedule 18.11.2016
comment
Работает, спасибо. Примечание для новичков в Google Apps Script: откройте презентацию Slides ›Инструменты› Редактор скриптов ›Скопируйте и вставьте приведенный выше код в Code.gs. Затем следуйте приведенным выше инструкциям @Bardy, чтобы включить API-интерфейсы Slides и Drive для этого конкретного документа Slides. Наконец, запустите код. Файлы будут сохранены в корневой папке вашего Диска. - person nickang; 01.06.2019
comment
Честно говоря, потребовалось некоторое время, чтобы разобраться, но это сработало отлично. Спасибо. - person dooderson; 16.06.2021

Лучший способ получить изображения слайдов - использовать конечную точку presentations.pages.getThumbnail:

https://developers.google.com/slides/reference/rest/v1/presentations.pages/getThumbnail

Следующий код скрипта приложений использует SlidesApp для итерации по слайдам, расширенную службу слайдов для создания эскиза изображения, UrlFetchApp для получения созданного эскиза и DriveApp для сохранения его на Диске:

function exportSlideImages(presentationId) {
  var presentation = SlidesApp.openById(presentationId);
  presentation.getSlides().forEach(function(slide, i) {
    // slide = presentation.getSlides()[];
    var thumbnail = Slides.Presentations.Pages.getThumbnail(presentationId, slide.getObjectId(), {
      'thumbnailProperties.thumbnailSize': 'LARGE'
    });
    var response = UrlFetchApp.fetch(thumbnail.contentUrl);
    var blob = response.getBlob();
    blob.setName('slide' + (i + 1) + '.png');
    var file = DriveApp.createFile(blob);
    Logger.log('Created file "%s" for slide number %s', file.getName(), i + 1);
  });
}
person Eric Koleda    schedule 12.10.2017
comment
Для этого API требуется авторизация. Я хочу получить эскиз публичного слайда. Есть ли способ получить миниатюру для предварительного просмотра без авторизации? - person Tien Hoang; 02.03.2020

Для всех, кто ищет ответ, я только что нашел официальный URL-адрес экспорта из своей консоли JavaScript, когда щелкнул «Загрузить -> JPG» из меню файлов, URL-адрес, который я увидел в консоли, которая загружает изображение, будет ( Например): https://docs.google. com / Presentation / d / 1xRtKNtBaaiGzZx3sUz2k3OUdW0hbPmm8HsRVz222SnA / export / jpeg? id = 1xRtKNtBaaiGzZx3sUz2k3OUdW0hbPmm8HsRVz222SnA_b0d = gb06

Что на самом деле:

https://docs.google.com/presentation/d/YourPublicSlideshowID/export/jpeg?id=YourPublicSlideshowID&pageid=TheSlideID

"TheSlideID" можно найти, выполнив следующие действия: перейдите к файлу слайд-шоу Google, перейдите к слайду, отличному от первого, затем скопируйте URL-адрес, он должен быть таким:


В итоге я выбрал немного менее технологичный способ. Это действительно имеет артефакты от сжатия, которое поставляется с экспортом PDF, но для меня оно достаточно близко к исходному качеству.

Я добавил аннотации к изображениям в Google Slides, чтобы в конечном итоге использовать изображения на marvelapp.com. Поэтому я экспортировал слайды Google в формате PDF.

Затем выдается командная строка (требуется установка ghostscript). Мне действительно нужно было сделать здесь 1200 точек на дюйм. Это сделано для того, чтобы получить уровень детализации, который был у меня на исходных изображениях, которые я поместил на слайды Google.

gs -sDEVICE=pngalpha -o file-%03d.png -r1200 demo.pdf

Поскольку мои слайды состояли из изображений, которые я только что перетащил на слайды Google, я сделал следующее, чтобы обрезать белые области, связанные с границами изображений (требуется установка ImageMagick)

mogrify -trim *.png

Наконец, я возвращаю изображения к исходному размеру. Уровень резкости 0,5, похоже, не вызывает значительных артефактов, 1,0 был слишком сильным.

convert -resize 1794x971 -sharpen 0x0.5 *.png

Вероятно, вы могли бы объединить их в одну операцию. По какой-то причине фактический процесс преобразования в таком высоком разрешении был для меня намного быстрее напрямую через gs, чем при использовании ImageMagick.

person savolai ᯓ    schedule 13.01.2018

Этот фрагмент закладки из https://aijayvishnu.medium.com/how-to-download-google-slide-presentations-published-to-the-web-3c1564bd92c1 разместит все слайды на одной странице. Его действительно легко использовать, создайте закладку и щелкните по ней. (Подробнее в статье)

javascript: 
var atag = "punch-viewer-content",
    btag = "-caption",
    ctag = "aria-setsize",
    dtag = "aria-posinset",
    msvg = document.getElementsByTagName("svg"),
    node = document.querySelectorAll('[class$="' + btag + '"]')[0],
    view = document.getElementsByClassName(atag)[0],
    size = node.getAttribute(ctag),
    data = "", 
    func = () => { 
      data += msvg[0].outerHTML;
      if((i = node.getAttribute(dtag))==size) document.write(data); 
      else view.click(), setTimeout(func,10) 
    };func()
person Joël    schedule 12.04.2021

Я искал несколько мест, нашел несколько ответов для загрузки слайдов Google в виде изображений, но они кажутся сложными или требуют больше времени, чем я ожидал.

Я хочу получить все слайды презентации Google в виде файла png или jpg, а затем сохранить их на диске Google. На самом деле я хочу, чтобы они были на моем локальном компьютере. Но я подумал, что если я смогу это сделать, то позже я скачаю и воспользуюсь.

Итак, как это сделать быстро и легко? Я нашел эту ссылку. Но здесь нет простого ответа.

Преимущество использования этого сценария для преобразования слайдов Google в изображения: Если вы хотите загрузить их на свой компьютер, вы можете загрузить папку. Если вам нравится делиться одним изображением с другими, вы тоже можете это сделать. Самое главное, если вы хотите поделиться презентацией в виде файла изображения - просто поделитесь папкой.

Вот мой слайд Google. Вы можете скопировать это. Откройте скрипт приложений из Инструменты ›Редактор скриптов. Затем запустите функцию generateScreenshots. Эта функция - не моя работа, но я получил ее от здесь. Изменено только для сохранения изображений в папке с именем Test_Image. Вы можете создать свою собственную папку на Google Диске, а затем использовать идентификатор папки в скрипте приложений и обновить эту строку:

var folder = DriveApp.getFolderById("Folder ID");//Replace Folder ID with your own folder

Полный код здесь.

function generateScreenshots() {
  // open Google Slide and then copy Google Slide ID (presentation ID)
  var presentationId ="1ZXT1YemGiNcFxiN61hwew_SEsEDC4cl_V-j0V_hkj6w";
  var presentation = SlidesApp.openById(presentationId);
  var baseUrl =
    "https://slides.googleapis.com/v1/presentations/{presentationId}/pages/{pageObjectId}/thumbnail";
  var parameters = {
    method: "GET",
    headers: { Authorization: "Bearer " + ScriptApp.getOAuthToken() },
    contentType: "application/json",
    muteHttpExceptions: true
  };

  // Log URL of the main thumbnail of the deck
  Logger.log(Drive.Files.get(presentationId).thumbnailLink);

  // For storing the screenshot image URLs
  var screenshots = [];

  var slides = presentation.getSlides().forEach(function(slide, index) {
    var url = baseUrl
      .replace("{presentationId}", presentationId)
      .replace("{pageObjectId}", slide.getObjectId());
    var response = JSON.parse(UrlFetchApp.fetch(url, parameters));

    // Upload Googel Slide image to a  Google Drive Folder
    var blob = UrlFetchApp.fetch(response.contentUrl).getBlob();
    var folder = DriveApp.getFolderById("Your Folder ID");//Replace Folder ID with your own folder
    folder.createFile(blob).setName("Image " + (index + 1) + ".png");

    screenshots.push(response.contentUrl);
  });

  return screenshots;
}

person k.b    schedule 27.05.2021

Я сделал плагин https://github.com/Nashev/CreatePNGSequenceForSlides для вызова https://developers.google.com/slides/reference/rest/v1/presentations.pages/getThumbnail для каждого слайда с небольшим графическим интерфейсом.

Его можно использовать с огромной презентацией, чтобы преодолеть ограничения Google на время выполнения сценария и количество вызовов getThumbnail.

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

person Nashev    schedule 15.03.2019