在HTML5画布中是否有任何事件告诉图像已经绘制
Is there any event in HTML5 canvas which tells that image has been drawn?
我使用<input type='file' onchange="readURL(this)"/>
控件将图像上传到我的web服务。这里我使用canvas
来减小图像大小。代码工作得很好,但是当我们第一次尝试上传图像时,它会发送空白图像,第二次尝试时,它会发送第一张图像。这意味着我需要一个canvas事件来告诉我图像何时已经在canvas上绘制了
function readURL(input) {
if (input.files && input.files[0]) {
var canvas = document.getElementById('canvas1');
var context = canvas.getContext('2d');
var reader = new FileReader();
reader.onload = function (e) {
var imageObj = new Image();
imageObj.onload = function () {
context.drawImage(imageObj, 0, 0, 300, 275);
};
imageObj.src = e.target.result.toString();
$.ajax({
//My Web Service call code
});
}
reader.readAsDataURL(input.files[0]);
}
}
所以问题是,是否有任何事件在HTML5画布告诉图像已绘制?
您必须将$.ajax
调用移动到图像的onload
处理程序中:
var imageObj = new Image();
imageObj.onload = function () {
context.drawImage(imageObj, 0, 0, 300, 275);
$.ajax({
//My Web Service call code
});
};
imageObj.src = e.target.result.toString();
您编写的代码在加载图像之前进行Ajax调用,并且直到加载发生时图像才被绘制到画布上。
尝试使用reader.onloadend
代替reader.onload.
顺便说一句,在一个不相关的问题上,有一个新的bug在Chrome中,是通过使用新的图像()绊倒。
如果你使用备用的:document.createElement("img")
,那就好了。
最后(不重要),由于您正在处理图像文件,您可以查看FileReader上的reader.readAsDataURL
选项。
相关文章:
- 用图像而不是颜色填充对象(将图像绘制到画布上)
- 仅使用Chrome进行慢速图像绘制
- 将 SVG 图像绘制到 CanvasRenderingContext2D 中
- 为什么我不能将图像绘制到画布中
- 将许多新图像绘制到画布时内存泄漏
- Javascript - 加载GIF冻结,同时将图像绘制到画布(Phonegap/Cordova)
- 画布:绘制图像而不是将图像绘制到画布
- 将图像绘制到<画布>
- 在浏览器中识别完整的图像绘制
- 画布图像绘制失败
- 将图像绘制到画布上
- 如何在画布上为运动图像绘制多条路径
- 将图像绘制到画布有时不显示任何东西
- 修剪透明背景的图像绘制在画布与PHP或javascript
- Javascript将图像绘制在彼此之上
- 我可以将数组值插入到画布的图像绘制函数中吗?
- 画布上的图像绘制比原始尺寸大
- 画布图像绘制不工作
- 将预先加载的图像绘制到画布中
- javascript从缓冲区(nodejs/socket.io)将图像绘制到html中