canvas教程

TheViper的技术博客(3)

字号+ 作者:H5之家 来源:H5之家 2016-01-15 13:28 我要评论( )

另外,无论怎么设置,renderAll()方法最终都会调用drawImageElement()方法进行实际意义上的绘制 Canvas.Element.prototype.drawImageElement = function(context,oImg,allowCorners) {if(oImg){oImg.cornervisibili

另外,无论怎么设置,renderAll()方法最终都会调用drawImageElement()方法进行实际意义上的绘制

Canvas.Element.prototype.drawImageElement = function(context,oImg,allowCorners) { if(oImg){ oImg.cornervisibility=allowCorners; var offsetY = oImg.height / 2; var offsetX = oImg.width / 2; context.save(); context.translate(oImg.left, oImg.top); context.rotate(oImg.theta); context.scale(oImg.scalex, oImg.scaley); this.drawBorder(context, oImg, offsetX, offsetY); var originalImgSize = oImg.getOriginalSize(); var polaroidHeight =((oImg.height-originalImgSize.height)-(oImg.width-originalImgSize.width))/2; context.drawImage(oImg._oElement,-originalImgSize.width/2,(-originalImgSize.height)/2-polaroidHeight, originalImgSize.width,originalImgSize.height); if (allowCorners) this.drawCorners(context, oImg, offsetX, offsetY); context.restore(); } }; mousemove Canvas.Element.prototype.onMouseMove = function(e) { var mp = this.findMousePosition(e); if(this._aImages == null) return; if(this._currentTransform==null){ var targetImg = this.findTargetImage(mp, true); this.setCursor(mp, targetImg); } else { if (this._currentTransform.action == 'rotate') { this.rotateImage(mp); this.scaleImage(mp); this.onRotateMove.fire(e); } else { this.translateImage(mp); this.onDragMove.fire(e); } this.renderTop(); } };

里面的renderTop()方法只在最上层canvas绘制当前操作的图片

Canvas.Element.prototype.renderTop = function() { this._oContextTop.clearRect(0,0,parseInt(this._oConfig.width), parseInt(this._oConfig.height)); this.drawImageElement(this._oContextTop, this._aImages[this._aImages.length-1],true); }; mouseup Canvas.Element.prototype.onMouseUp = function(e) { if (this._aImages == null) { return; } var target=this._currentTransform.target; if (target) target.setImageCoords();//重置图片canvas封装 if(this._currentTransform!= null&&this._currentTransform.action=="rotate") { this.onRotateComplete.fire(e); } else if (this._currentTransform!=null&&this._currentTransform.action == "drag"){ this.onDragComplete.fire(e); } this._currentTransform = null; this.renderTop(); if(this._aImages.length>0)//没有选中的图片 $('canvas_menu').style.display="block"; }; 替换图片 <div> ... <a href='javascript:void(0)'>更改图片</a> </div> avalon.bind($('puzzle_update'),'click',function(){ update_puzzle=true; $('puzzle_add_input').click(); });

可以看到,这里依然使用了<input>点击选中图片,不过设置了update_puzzle=true,表示当前处在替换图片的情况下

function onSelect(file_filter){ for(var i=this._start,len=file_filter.length;i<len;i++) { var reader=new FileReader(); reader.onload=(function(i){//图片读取的回调 return function(e){ ... img.onload = function() { ... var t = window.setTimeout(function() { if(!update_puzzle) canvas_puzzle.init(); else{ //当前操作图片 var target=canvas._prevTransform.target; //传入替换的图片和被替换图片的位置,状态信息 canvas._aImages[getCurImg()]=new canvasImg.Img(document. querySelectorAll('.middleware_img')[0],{ top:target.top, left:target.left, scalex:target.scalex, scaley:target.scaley, angle:canvas.curAngle }); //重新绘制最上层 canvas.renderTop(); html5_puzzle.middleware_list.clear(); update_puzzle=false; } clearTimeout(t); }, 1000); }; }; delete reader; })(i); reader.readAsDataURL(file_filter[i]); } ... } function getCurImg(){//获取读取操作图片在_aImages中的位置 var oImg=canvas._prevTransform.target; for(var i=0;i<canvas._aImages.length;i++){ if(canvas._aImages[i]._oElement.src==oImg._oElement.src){ return i; } } } 删除图片 <div> <a href='javascript:void(0)'>删除</a> ... </div> avalon.bind($('puzzle_delete'),'click',function(){ canvas._aImages.splice(getCurImg(),1);//从_aImages数组中删除 canvas.renderAll(false,false);//重新绘制 $('canvas_menu').style.display="none"; ... }); 拼图转换成base64字符串 Canvas.Element.prototype.canvasTo = function(format) {//canvas=>dataurl this.renderAll(true,false);//所有图片都绘制到最上层,并且不绘制边框,边角 if (format == 'jpeg' || format == 'png') { return this._oElement.toDataURL('image/'+format); } }; 上传 avalon.post('...',{ imgData:canvas.canvasTo('jpeg').substr(22) },function(data){ ... },'json');

后台用Base64解析imgData字符串就可以了

下载

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • html5canvas核心技术图形、动画与游戏开发源码

    html5canvas核心技术图形、动画与游戏开发源码

    2017-05-02 17:42

  • 传智播客PHP培训 韩顺平 PHP视频教程 Ajax技术 课堂源代码.zip

    传智播客PHP培训 韩顺平 PHP视频教程 Ajax技术 课堂源代码.zip

    2017-04-26 16:00

  • canvas毛边的问题,大神求救!!!

    canvas毛边的问题,大神求救!!!

    2017-04-16 14:01

  • 使用CamanJS在Web页面上处理图像的技巧【站长博客网】

    使用CamanJS在Web页面上处理图像的技巧【站长博客网】

    2017-04-13 17:02

网友点评
/