google 从侧边栏 base64 幻灯片插入图片

google slide insert image from sidebar base64

错误:未捕获的脚本错误:异常:您尝试使用的图像无效或损坏。

侧边栏中的图片是通过 api 以 base64 编码传输的,点击图片后它应该在幻灯片中插入/(copy/clone)。

我的带有 url 图片的脚本在传入 insertImage() 时工作​​正常,但使用 base64 作为参数时它会抛出错误。

Sidebar.html(工作正常)

$.ajax({ 
        .......

   $('#images_assets').append($('<li>')
        .attr('data-imgname', v.Id)
        .html([
            $('<img>')
            .attr('class', 'img-mlc1')
            .attr('id', 'img-mlc-' + v.Id)
            .attr('src', 'data:image/png;base64,' + jqXHR.responseText)
            .attr('draggable', false),
            $("<span>").html(v.Id)
        ]));
});

//点击图片,我调用这个方法

 function cloneImgInSlide(img_src) {
     this.disabled = true;
        $('#error').text('');
        google.script.run.imgInsert(img_src);
 }

Code.js(此脚本中的问题)

function imgInsert(src){
    var slide = SlidesApp.getActivePresentation().getSlides()[0];
    var position = {left: 0, top: 0};
    var size = {width: 300, height: 100};

   //seems error here after this line

    var blob = Utilities.newBlob(src, 'image/png', 'MyImageName');

    slide.insertImage(blob, position.left, position.top, size.width, size.height);  
}

我想提出以下修改。

修改点:

首先从in sidebar images are coming through api in base64 encoding, once click on image it should insert/(copy/clone) in slide.开始,假设google.script.run.imgInsert(img_src);img_src是base64数据

如果google.script.run.imgInsert(img_src)img_src是base64数据,当var blob = Utilities.newBlob(src, 'image/png', 'MyImageName')returns是base64数据的blob。据此,认为在slide.insertImage(blob, position.left, position.top, size.width, size.height).

处出现了这样的错误

为了在您的脚本中使用图像 blob,需要解码 base64 数据。

当你的脚本修改后,变成如下。

修改后的脚本:

请在 Google Apps 脚本端修改 imgInsert 的功能。在这个修改中,可以使用有和没有像data:image/png;base64,这样的header的base64数据。

从:
var blob = Utilities.newBlob(src, 'image/png', 'MyImageName');
到:
var checkHeader = src.split(",");
var bytes = Utilities.base64Decode(checkHeader.length == 1 ? src : checkHeader[1]);
var blob = Utilities.newBlob(bytes, 'image/png', 'MyImageName');

注:

  • 当上述修改没有解决问题时,我认为imgInsert(src)src可能不是base64数据。届时请再次确认。并请告诉我详细信息。

参考文献: