Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 在图纸或驱动器中使用AppScript进行图像裁剪_Google Apps Script_Google Sheets_Google Drive Api_Google Sheets Api - Fatal编程技术网

Google apps script 在图纸或驱动器中使用AppScript进行图像裁剪

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对象

我正在使用AppScripts为报表生成器评估Google工作表。要求包括从Google Drive插入图像。其中一个输入图像有固定格式,我需要裁剪。(因此,原始图像的尺寸和裁剪的尺寸是已知的。)

我正在寻找实现这一结果的解决方案,但我正在努力。我研究了以下方法:

  • 驱动器API中没有图像裁剪功能
  • 图纸对象无图像裁剪(仅调整大小)
  • =image()
    函数没有图像裁剪
  • 可以手动创建图形、添加图像并对其进行裁剪:
    • 但您不能从应用程序脚本执行此操作
    • 不能将图形中的图像作为OverGridImage对象访问。(这将允许您替换其图像。)
  • 您可以使用幻灯片API
    replace(图像URL,裁剪)
    • 是否可以通过AppScript将幻灯片嵌入/链接到工作表中
还有其他解决办法吗?(即使这意味着在驱动器中创建新文件?)


编辑:显然有一种解决方案可以调用外部API,或者使用GCP服务,比如CloudFunctions(不是免费的)。不过,我希望有一个AppScript解决方案。(或使用兼容的JS库。)

我相信您的目标如下

  • 您希望使用谷歌应用程序脚本实现图像裁剪
问题和解决方法: 不幸的是,在当前阶段,没有使用谷歌应用程序脚本直接裁剪图像的方法。这一点我已经提过了。所以在这个答案中,我想提出一个使用谷歌应用程序脚本裁剪图像的解决方案

在这个解决方案中,我使用Microsoft Powerpoint和Google幻灯片。此解决方案的流程如下所示

  • 通过设置页面大小创建Microsoft Powerpoint(PPTX数据)。
    • 在这种情况下,将设置裁剪留下的图像的宽度和高度。这用作图像窗口
    • 解压转换后的PPTX数据时,数据可以作为XML数据进行分析。幸运的是,在MicrosoftDocs中,详细规范以开放XML的形式发布。因此,在本例中,可以使用Google Apps脚本的XmlService分析诸如XLSX、DOCX和PPTX等Microsoft文档。在此解决方案中,通过包含页面大小直接创建PPTX数据。我认为这种方法对其他情况也很有用
    • 如果可以正确使用幻灯片API的“presentations.create”方法,则不需要这样做
  • 将PPTX数据转换为谷歌幻灯片
  • 将要裁剪的图像插入到创建的谷歌幻灯片中。
    • 此时,从坐标原点减去“顶部”和“左侧”的裁剪。因为谷歌幻灯片的坐标原点是左上角
  • 使用检索缩略图图像
  • 通过上述流程,裁剪后的图像可以作为水滴检索

    在此示例脚本中,使用参数使用Google Apps脚本裁剪图像。在本例中,反映上述流程的脚本有点复杂。因此,在这里,我想介绍使用GoogleApps脚本库的示例脚本。当然,你可以在那里看到整个剧本

    示例脚本: 在使用此脚本之前,请安装谷歌应用程序脚本库的ImgApp。在这种情况下

    • 此示例脚本在Google Drive上裁剪图像,并将裁剪后的图像创建到根文件夹。
      • crop:{t:50,b:100,l:200,r:100}
        表示
        t
        b
        l
        r
        的裁剪大小分别为顶部、底部、左侧和右侧。单位为像素
    • 关于最大图像大小,您可以在中看到它。在此示例脚本中,
      25000000像素^2
      是图像的最大大小
    参考资料:

    否,应用程序脚本和驱动器/工作表API中没有用于此的工具。但我想有第三方API可以裁剪图像。如果是这样的话,您可以使用
    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);
    }