随笔-javascript/html5裁剪初试

裁剪,首先要有drag、resize,来定义裁剪区,显示上面 裁剪掉的部分显示阴影,可以使用css属性clip,属性值这个样子写,就兼容了所有的浏览器:clip:rect('1px 30px 30px 1px')

考虑到后端裁剪图片的效率(jsp后天,裁剪、编辑图片灰常慢,原因未知),做了个判断,支持html5的canvas和toDataUrl() 则上传DataUrl()数据,因为裁剪后最大尺寸只有130×130,所以数据量很小。DataUrl数据要去掉最初的“data:image/gif;base64,”字符,不支持html5的浏览器,只好上传裁剪区域坐标、图片缩放比,由后端裁剪。

判断代码

1 var temCanvas = document.createElement('canvas');

2 if (temCanvas .getContext && temCanvas .toDataURL){

3         //you code for canvas

4 }else{

5        //you code   

6 }

drag和resize的同时会setClip,更新显示,setClip中调用传过来的cuting方法,可以实时预览裁剪部分。

设置裁剪区域显示代码

 1       var setClip = function() {

 2                 var position = $dragHelp.position();

 3                 var w = $dragHelp.width();

 4                 var h = $dragHelp.height();

 5                 $cutHelper.css({

 6                     clip: 'rect(' + position.top + 'px ' + (w + position.left) + 'px ' + (h + position.top) + 'px ' + position.left + 'px)'

 7                 });

 8                 Options.cuting.call($this.get(0),{

 9                     x: position.left - $this.position().left,

10                     y: position.top - $this.position().top,

11                     w: w,

12                     h: h,

13                     imgW: $this.width(),

14                     imgH: $this.height(),

15                     imgRealW: realSize[0],

16                     imgRealH: realSize[1]

17                 });

18             };

取到UrlData,需要使用drawImage,三种类型参数最多的那个(裁剪写入图片),如需更多尺寸即可写入刚创建的canvas,即 canvas.getContext('2d').drawImage(canvas_130,0,0,48,48);  //得到48×48的canvas

分别canvas.toDataURL("image/png").substring(22),即得到完整的base64编码的DataUrl数据,ajax上传吧~

 

不支持html5就用ajax发送这些裁剪参数,一切后台搞定。

你可能感兴趣的:(JavaScript)