将上传的图像(使用Ajax)绘制到Canvas

我使用jQuery AJAX Form插件上传图像而不刷新页面。 如果我在图像标签中显示上传的图像(将src设置为上传的图像路径),则可以。但是,我无法在canvas元素上绘制上传的图像。 我实际上不知道问题是什么。

if (isset($_FILES["image"]["name"]) && !empty($_FILES["image"]["name"])) { $filename = $_FILES["image"]["name"]; $tmpname = $_FILES["image"]["tmp_name"]; $location = "uploads/"; move_uploaded_file($tmpname, $location.$filename); echo $location.$filename; } else {}​ var canvas = document.getElementById("canv"); var contex = canvas.getContext("2d"); var img = new Image(); img.src = responseText; img.onload = function(){ contex.putImageData(img, 0, 0); } 

当我在Ajax进程完成时调用时,上面是我的回调函数(内部)。 谢谢你的任何有用的答案。

更新:完整代码

        $(document).ready(function(){ $("#myform").ajaxForm(function({success: updateSrc}){ }); }); function updateSrc(responseText){ var canvas = document.getElementById("canv"); var contex = canvas.getContext("2d"); var img = new Image(); img.src = responseText; img.onload = function(){ contex.drawImage(img, 0, 0); } }    

你使用的是错误的function。

 context.putImageData(imgData,x,y); 

它需要图像数据,它不是图像对象而是原始像素数据。 相反,您想要使用:

 context.drawImage(img,0,0); 

它应该解决你的问题

您有没有理由不对图像进行自动请求?

如同将updateSrc保留为

 function updateSrc(imagePath){ var canvas = document.getElementById("canv"); var contex = canvas.getContext("2d"); var img = new Image(); img.src = imagePath; img.onload = function(){ contex.drawImage(img, 0, 0); } } 

其中imagePath是图像文件的路径。 例如:

updateSrc( “图像/ example_image.jpg”);

所以jquery ajax请求甚至不需要写。