Google apps script 在图纸或驱动器中使用AppScript进行图像裁剪
我正在使用AppScripts为报表生成器评估Google工作表。要求包括从Google Drive插入图像。其中一个输入图像有固定格式,我需要裁剪。(因此,原始图像的尺寸和裁剪的尺寸是已知的。) 我正在寻找实现这一结果的解决方案,但我正在努力。我研究了以下方法:Google apps script 在图纸或驱动器中使用AppScript进行图像裁剪,google-apps-script,google-sheets,google-drive-api,google-sheets-api,Google Apps Script,Google Sheets,Google Drive Api,Google Sheets Api,我正在使用AppScripts为报表生成器评估Google工作表。要求包括从Google Drive插入图像。其中一个输入图像有固定格式,我需要裁剪。(因此,原始图像的尺寸和裁剪的尺寸是已知的。) 我正在寻找实现这一结果的解决方案,但我正在努力。我研究了以下方法: 驱动器API中没有图像裁剪功能 图纸对象无图像裁剪(仅调整大小) =image()函数没有图像裁剪 可以手动创建图形、添加图像并对其进行裁剪: 但您不能从应用程序脚本执行此操作 不能将图形中的图像作为OverGridImage对象
- 驱动器API中没有图像裁剪功能
- 图纸对象无图像裁剪(仅调整大小)
函数没有图像裁剪=image()
- 可以手动创建图形、添加图像并对其进行裁剪:
- 但您不能从应用程序脚本执行此操作
- 不能将图形中的图像作为OverGridImage对象访问。(这将允许您替换其图像。)
- 您可以使用幻灯片API
replace(图像URL,裁剪)
- 是否可以通过AppScript将幻灯片嵌入/链接到工作表中
编辑:显然有一种解决方案可以调用外部API,或者使用GCP服务,比如CloudFunctions(不是免费的)。不过,我希望有一个AppScript解决方案。(或使用兼容的JS库。)我相信您的目标如下
- 您希望使用谷歌应用程序脚本实现图像裁剪
- 在这种情况下,将设置裁剪留下的图像的宽度和高度。这用作图像窗口
- 解压转换后的PPTX数据时,数据可以作为XML数据进行分析。幸运的是,在MicrosoftDocs中,详细规范以开放XML的形式发布。因此,在本例中,可以使用Google Apps脚本的XmlService分析诸如XLSX、DOCX和PPTX等Microsoft文档。在此解决方案中,通过包含页面大小直接创建PPTX数据。我认为这种方法对其他情况也很有用
- 如果可以正确使用幻灯片API的“presentations.create”方法,则不需要这样做李>
- 此时,从坐标原点减去“顶部”和“左侧”的裁剪。因为谷歌幻灯片的坐标原点是左上角
- 此示例脚本在Google Drive上裁剪图像,并将裁剪后的图像创建到根文件夹。
表示crop:{t:50,b:100,l:200,r:100}
,t
,b
和l
的裁剪大小分别为顶部、底部、左侧和右侧。单位为像素r
- 关于最大图像大小,您可以在中看到它。在此示例脚本中,
是图像的最大大小25000000像素^2
UrlFetch
调用它们,并将裁剪后的图像添加到工作表中。@Cooper一篇很棒的文章,实际上让我想到了一个肮脏的解决方法。如果我使用幻灯片裁剪图像,然后使用getBlob()
,会怎么样。这会返回完整图像还是只返回裁剪的部分?交叉引用如何在幻灯片中进行裁剪:我尝试在工作表中裁剪图像并使用getBlob()
或getAs('image/png')
,但两者都返回完整图像,而不是裁剪区域,因此这是一条死胡同。我喜欢你的想法!我的解决方法是托管我自己的PHP脚本,该脚本获取图像和裁剪参数并返回裁剪后的图像。它不能很好地扩展,并且可能涉及托管PHP服务器的额外成本。(如果已经支付了。)而且可能比您的解决方案慢。@Adam Ocsvari感谢您的回复。这是一个使用谷歌应用程序脚本的变通方法。我认为有几个变通办法。所以,请把这看作是其中之一。如果我的变通方法对您的情况没有帮助,我道歉。
function myFunction() {
const id = "###"; // If you want to crop the image on Google Drive, please set the file ID of the image here.
const object = {blob: DriveApp.getFileById(id).getBlob(), crop: {t: 50, b: 100, l: 200, r: 100}};
const blob = ImgApp.editImage(object);
DriveApp.createFile(blob);
}