等待在Javascript中加载图像
Wait while image is loaded in Javascript
我有以下问题:
function getBase64Image() {
var svg = //some svg string;
var canvas = document.createElement('canvas');
var mimetype = 'image/png';
canvas.width = 600;
canvas.height = 600;
var timg = new Image(),
ctx = canvas.getContext('2d');
timg.width = 600;
timg.height = 600;
timg.onload = function () {
document.body.appendChild(canvas);
try {
ctx.clearRect(0, 0, 600, 600);
ctx.drawImage(timg, 0, 0);
}
catch (e) {
return false;
}
var strData = canvas.toDataURL(mimetype);
document.body.removeChild(canvas);
img_data = strData;
}
timg.src = 'data:image/svg+xml;base64,' + svg;
}
return img_data;
}
基本上,我想将svg转换为png。我有svg字符串,然后我加载图像并用画布绘制它。然后我为png图像获取base64字符串。我遇到的问题是,函数getBase64Image在图像加载之前退出。我该如何预防呢?
也许使用延迟或重写函数?我谷歌了一下,但找不到相近的答案。
谢谢。
不能在同步函数中修改异步函数。
最简单的解决方案是传递一个回调:
function fetchBase64Image(callback) {
var svg = //some svg string;
var canvas = document.createElement('canvas');
var mimetype = 'image/png';
canvas.width = 600;
canvas.height = 600;
var timg = new Image(),
ctx = canvas.getContext('2d');
timg.width = 600;
timg.height = 600;
timg.onload = function () {
document.body.appendChild(canvas);
try {
ctx.clearRect(0, 0, 600, 600);
ctx.drawImage(timg, 0, 0);
}
catch (e) {
return false;
}
var strData = canvas.toDataURL(mimetype);
document.body.removeChild(canvas);
img_data = strData;
callback(img_data);
}
timg.src = 'data:image/svg+xml;base64,' + svg;
}
}
你可以这样使用:
fetchBase64Image(function(img_data){
// use the image img_data
}):
相关文章:
- 如何在谷歌字体加载时显示加载图像
- 预加载图像并插入DOM
- 加载图像时加载图标
- 在页面启动期间加载图像
- 预加载图像image.onload脚本MVC
- 可以't在我的React组件中加载图像
- 加载图像后调整HTML画布的大小
- HTML/JS github页面项目没有't在使用firefox运行时加载图像或声音
- 错误:$injector:modulerr加载图像时模块处于角度
- 谷歌地图加载后隐藏加载图像
- 在照片查看器(Javascript和jQuery)中异步加载图像时可能出现错误
- 正在从字节数组加载图像内容
- 网页上已有tinymce加载图像列表
- 单击提交按钮后加载图像将冻结
- 如何使用Express'正确加载图像;s的静态中间件
- 使用jquery即时加载图像
- Html5画布使用JCanvasScript加载图像
- Javascript使用JCanvaScript在画布中加载图像
- 使用jquery/ajax显示加载图像
- ajax缓存false无法加载图像