我非常喜欢使用 Google 幻灯片作为云托管的轻量级插画替代品(这也恰好是协作和免费的!)。我在这里写了一些关于我的过程的想法:
我在我的工作流程中尝试做的是一次将演示文稿中的所有幻灯片下载为图像?Google 幻灯片 UI 只允许您一次将每张幻灯片下载为 PNG 格式?
这可能以某种方式使用附加组件或应用程序脚本吗?不知道从哪里开始...谢谢!
我非常喜欢使用 Google 幻灯片作为云托管的轻量级插画替代品(这也恰好是协作和免费的!)。我在这里写了一些关于我的过程的想法:
我在我的工作流程中尝试做的是一次将演示文稿中的所有幻灯片下载为图像?Google 幻灯片 UI 只允许您一次将每张幻灯片下载为 PNG 格式?
这可能以某种方式使用附加组件或应用程序脚本吗?不知道从哪里开始...谢谢!
以下对我有用:
在Resources > Developer Console Project > View Developers Console下,启用Slides API和Drive API。
替换从start()
函数中的幻灯片 URL 获取的 ID,然后运行它,例如:
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')
}
获取幻灯片图像的最佳方法是使用presentations.pages.getThumbnail
端点:
https://developers.google.com/slides/reference/rest/v1/presentations.pages/getThumbnail
以下 Apps 脚本代码用于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 幻灯片中的图像添加了注释,最终使用 marvelapp.com 中的图像。所以我将 Google 幻灯片导出为 PDF。
然后发出命令行(需要安装ghostscript)。我实际上需要在这里做 1200 DPI。这是为了得到我在原始图像中的细节水平,我把它放到了谷歌幻灯片上。
gs -sDEVICE=pngalpha -o file-%03d.png -r1200 demo.pdf
由于我的幻灯片是由我刚刚拖到谷歌幻灯片上的图片组成的,所以我发布了以下内容来裁剪连接到图像边框的白色区域(需要安装 ImageMagick)
mogrify -trim *.png
最后,我将图像大小调整回图像的原始大小。锐化级别 0.5 似乎不会造成明显的伪影,1.0 太强了。
convert -resize 1794x971 -sharpen 0x0.5 *.png
您可能可以将这些组合成一个操作。出于某种原因,在如此高的 DPI 下的实际转换过程对我来说直接通过 gs 比使用 ImageMagick 快得多。
对于在那里寻找答案的其他人,我刚刚从我的 JavaScript 控制台中找到了官方导出 URL,当单击文件菜单下的“下载 -> JPG”时,我在控制台中看到的下载图片的 URL 是(例如): https ://docs.google.com/presentation/d/1xRtKNtBaaiGzZx3sUz2k3OUdW0hbPmm8HsRVz222SnA/export/jpeg?id=1xRtKNtBaaiGzZx3sUz2k3OUdW0hbPmm8HsRVz222SnA&pageid=g6eb73d655b_0_0
这真的是:
可以通过以下操作找到“TheSlideID”:转到您的 Google 幻灯片文件,转到与第一张不同的幻灯片,然后复制 URL,它应该是这样的:
例如。注意,在“edit”关键字之后,是“#slide=id.g6eb73d655b_0_0”,提取SlideId(插入到其他URL)非常简单:只需替换文本“#slide=id”即可。使用“”(如果您以编程方式或手动进行),然后将其余部分(在本例中为“g6eb73d655b_0_0”)插入上述 URL 中的“TheSlideID”,然后 vwala!
这个来自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()
我搜索了几个地方,找到了一些将谷歌幻灯片下载为图片的答案,但它们看起来很复杂,或者比我预期的要花更多的时间。
我想将谷歌幻灯片演示文稿的所有幻灯片作为 png 或 jpg 文件,然后将它们保存在谷歌驱动器中。实际上我希望它们在我的本地计算机中。但是我虽然如果我能做到这一点,那么以后我会下载和使用。
那么如何快速轻松地做到这一点呢?我找到了这个链接。但这里没有简单的答案。
使用此脚本将谷歌幻灯片转换为图像的优势: 如果您想将它们下载到您的 PC 中,您可以下载该文件夹。如果您想与其他人共享单个图像,您也可以这样做。最重要的是,如果您想将演示文稿共享为图像文件 - 只需共享文件夹即可。
这是我的谷歌幻灯片。你可以复制它。从工具>脚本编辑器打开应用程序脚本。然后运行“generateScreenshots”函数。这个功能不是我自己的作品,而是从这里得到的。仅修改为将图像保存到名称为“Test_Image”的特定文件夹中。您可以在 google drive 中创建自己的文件夹,然后在应用程序脚本中使用文件夹 ID 并更新此行:
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;
}
我制作了https://github.com/Nashev/CreatePNGSequenceForSlides插件来调用https://developers.google.com/slides/reference/rest/v1/presentations.pages/getThumbnail为每张带有小 GUI 的幻灯片
它可以与大型演示文稿一起使用,以克服 Google 对脚本执行时间和“getThumbnail”调用次数的限制。