函数handleFileSelect(evt){ var files=evt.target.files;// FileList对象 for(var i=0,f;f=文件[i];i++){ if(!f.type.match('image.*')){ 继续; } //异步读取文件内容 var reader=新的FileReader(); //闭包以捕获文件信息。 reader.onload=(函数(theFile){ 返回函数(e){ var canvas=document.createElement(“canvas”); var datauri=事件目标结果, ctx=canvas.getContext(“2d”), img=新图像(); img.onload=函数(){ canvas.width=宽度; canvas.height=高度; ctx.drawImage(img,0,0,宽度,高度); }; img.src=数据URI; var imageData=ctx.getImageData(0,0,canvas.width,canvax.height); document.body.appendChild(画布)// 图片已上传 //生成图像数据 var Pic=canvas.toDataURL(“image/png”); console.log(图片);//=> 返回测试时等于空白的base64值 Pic=Pic.replace(/^data:image\/(png|jpg); base64,/,“”) //将图像发送到服务器 $.ajax(美元)({ // … }); }; })(f) ; reader.readAsDataURL(f); } }
-
1 为什么 $.ajax(美元) 呼叫(即 //正在将图像发送到服务器 )空的? 如果您故意跳过了一些行,请添加注释。 – 托拜厄斯 评论 2015年7月2日19:52 -
1 做 console.log(图片); 输出什么? – 最落后的 评论 2015年7月2日19:53 -
是的,它给出了一些以64为基数的值,我测试的基本上是空白的: – 用户3399326 评论 2015年7月2日19:55 -
@徐福克斯:这不是问题 – 用户3399326 评论 2015年7月2日20:00 -
2 我想,从 var imageData=… 应该进入 img.加载 功能。 图像需要加载才能绘制到画布上(这是正确的),但画布需要有图像才能从中获取URL。 – 塞巴斯蒂安·西蒙 评论 2015年7月2日20:26
2个答案
img.onload=函数(){ canvas.width=宽度; canvas.height=高度; ctx.drawImage(img,0,0,宽度,高度); var imageData=ctx.getImageData(0,0,canvas.width,canvax.height); document.body.appendChild(画布)// 图片已上传 //生成图像数据 var Pic=canvas.toDataURL(“image/png”); console.log(图片);//=> 返回测试时等于空白的base64值 Pic=Pic.replace(/^data:image\/(png|jpg); base64,/,“”) //将图像发送到服务器 $.ajax(美元)({ // … }); }; img.src=数据URI;
ctx.drawImage(img,0,0,宽度,高度);
var imageData=ctx.getImageData(0,0,canvas.width,canvax.height);
var Pic=canvas.toDataURL(“image/png”);
var Pic=canvas.toDataURL(“image/png”).split(',')[1];