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

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

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

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

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

7 ответов

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

Настроить

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

выполнение

Вызов downloadPresentation(id) с идентификатором, взятым из URL-адреса слайдов, например:

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

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

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

Следующий код приложения Script использует 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);
  });
}

Я закончил с немного более низким способом. Это имеет артефакты от сжатия, которые идут с экспортом в 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

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

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

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

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

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

https://docs.google.com/presentation/d/1xRtKNtBaaiGzZx3sUz2k3OUdW0hbPmm8HsRVz222SnA/edit

например. Обратите внимание, что после ключевого слова "edit" стоит "#slide=id.g6eb73d655b_0_0", извлечь SlideId (для подключения к другому URL-адресу) очень просто: просто замените текст "# slide = id". с "" (если вы делаете это программно или просто вручную), затем вставьте остаток (в данном случае "g6eb73d655b_0_0") в "TheSlideID" в указанном выше URL-адресе и vwala!

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

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

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

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

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

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

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

Этот фрагмент закладки с 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()

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

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

Другие вопросы по тегам