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数据。届时请再次确认。并请告诉我详细信息。
参考文献:
错误:未捕获的脚本错误:异常:您尝试使用的图像无效或损坏。
侧边栏中的图片是通过 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数据。届时请再次确认。并请告诉我详细信息。