首页 > 代码库 > 超少代码的头像裁剪上传
超少代码的头像裁剪上传
效果:
as上传的好处在于裁剪工作在客户端就完成了,而用jcrop的话要记录裁剪大小,位置坐标等,传给服务端才能裁剪
代码很简单
1 package 2 { 3 import flash.display.*; 4 import flash.events.Event; 5 import flash.utils.ByteArray; 6 import flash.events.*; 7 import flash.net.*; 8 import com.adobe.images.JPGEncoder; 9 import flash.geom.*; 10 import flash.ui.Mouse; 11 import elements.*; 12 import flash.utils.ByteArray; 13 import flash.ui.*; 14 15 public class avatar_upload extends MovieClip 16 { 17 private var loader:Loader; 18 private var fileRef1:FileReference = new FileReference ; 19 private var Data:ByteArray; 20 var loader1:Loader; 21 var _bitmap:Bitmap; 22 var squ:squarePoint; 23 var s:Sprite; 24 //var arrow:scaleArrowhead; 25 var nowArrow:Sprite; 26 var rect:Rectangle=new Rectangle(); 27 var rect1:Rectangle=new Rectangle(); 28 var maskSprite:Sprite; 29 var crop_bmd:BitmapData; 30 var content_bmd:Bitmap = new Bitmap ; 31 public function avatar_upload() 32 { 33 again.addEventListener(MouseEvent.CLICK,again_handler); 34 upload_btn.addEventListener(MouseEvent.CLICK,upload_handler); 35 load_img.reload.addEventListener(MouseEvent.CLICK,reload_handler); 36 init_border(); 37 uploading.visible = true; 38 tip.visible = false; 39 } 40 //初始化边框及事件 41 public function init_border() 42 { 43 s = new Sprite ; 44 s.addEventListener(MouseEvent.MOUSE_DOWN,mouse_down); 45 squ = new squarePoint ; 46 arrow.rotation = 45; 47 arrow.x = 0; 48 arrow.y = 0; 49 arrow.visible = false; 50 s.addChild(arrow); 51 s.addEventListener(MouseEvent.MOUSE_OVER,mouse_over1); 52 arrow.addEventListener(MouseEvent.MOUSE_OVER,mouse_over1); 53 squ.addEventListener(MouseEvent.MOUSE_OUT,mouse_out1); 54 s.addEventListener(MouseEvent.MOUSE_OUT,mouse_out1); 55 arrow.addEventListener(MouseEvent.MOUSE_DOWN,mouse_down1); 56 stage.addEventListener(MouseEvent.MOUSE_UP,mouse_up1); 57 var g:Graphics = s.graphics; 58 g.lineStyle(0.2,0xff0000,0.5); 59 g.beginFill(0xffffff,0); 60 g.drawRect(0,0,110,105); 61 squ.x = 107; 62 squ.y = 103; 63 s.addChildAt(squ,0); 64 //trace(s.width+" "+s.height); 65 } 66 //上传 67 private function upload_handler(event:MouseEvent):void 68 { 69 uploading.visible = true; 70 tip.visible = true; 71 tip.text = "上传中..."; 72 var r:Rectangle = squ.getBounds(s); 73 var bitmapData:BitmapData = http://www.mamicode.com/cropBitmap(load_img,s.x + 1,s.y + 1,r.x + 3,r.y + 3).bitmapData; 74 var _encoder:JPGEncoder = new JPGEncoder(100); 75 bitmapData.draw(bitmapData); 76 Data =http://www.mamicode.com/ _encoder.encode(bitmapData); 77 var req:URLRequest = new URLRequest("http://localhost/youtube/util/upload.php"); 78 req.data =http://www.mamicode.com/ Data; 79 req.method = URLRequestMethod.POST; 80 req.contentType = "application/octet-stream"; 81 var loader:URLLoader = new URLLoader ; 82 loader.dataFormat = URLLoaderDataFormat.BINARY; 83 loader.load(req); 84 loader.addEventListener(Event.COMPLETE,upload_complete); 85 } 86 private function upload_complete(event:Event):void 87 { 88 uploading.visible = false; 89 tip.visible = false; 90 } 91 //重选图片 92 private function again_handler(event:MouseEvent):void 93 { 94 load_img.removeChildAt(2); 95 load_img.removeChildAt(2); 96 gen_img.removeChildAt(0); 97 s.removeChildAt(0); 98 s.visible = false; 99 init_small.visible = true;100 load_img.reload.visible = true;101 }102 private function reload_handler(event:MouseEvent):void103 {104 fileRef1.browse(getFilterTypes());105 fileRef1.addEventListener(Event.SELECT,selectHandler);106 }107 private function getImagesFilter():FileFilter108 {109 return new FileFilter("images(*.jpg, *.gif, *.png, *.jpg)","*.jpg;*.jpeg;*.gif;*.png");110 }111 private function getFilterTypes():Array112 {113 return [getImagesFilter()];114 }115 private function selectHandler(event:Event):void116 {117 fileRef1.load();118 fileRef1.addEventListener(Event.COMPLETE,function()119 {120 loader1=new Loader();121 loader1.loadBytes(fileRef1.data);122 loader1.contentLoaderInfo.addEventListener (Event.COMPLETE, onl oaded1);123 load_img.reload.visible=false;124 fileRef1.removeEventListener(Event.COMPLETE, arguments.callee);125 });126 }127 //载人图像 128 private function onl oaded1(e:Event):void129 {130 s.visible =true;131 var _bitmap:Bitmap = e.target.content as Bitmap;132 this._bitmap = _bitmap;133 scaleInBox(_bitmap,390,360);134 s.x = _bitmap.x = (390 - _bitmap.width) * 0.5;135 s.y = _bitmap.y = (360 - _bitmap.height) * 0.5;136 load_img.addChild(_bitmap);137 load_img.addChild(s);138 draw_capture();139 drawMask();140 uploading.visible = false;141 loader1.contentLoaderInfo.addEventListener(Event.COMPLETE,arguments.callee);142 }143 private function mouse_down(e:MouseEvent)144 {145 rect1.x = this._bitmap.x;146 rect1.y = this._bitmap.y;147 rect1.width = this._bitmap.width - s.width;148 rect1.height = this._bitmap.height - s.height;149 arrow.visible = false;150 e.target.startDrag(false,rect1);151 //trace(rect1);152 //e.stopPropagation();153 stage.addEventListener(MouseEvent.MOUSE_MOVE,mouse_move);154 }155 private function mouse_move(event:MouseEvent):void156 {157 //trace(rect1);158 //trace(s.width+" "+s.height);159 draw_content();160 //event.updateAfterEvent();161 }162 private function mouse_up(event:MouseEvent):void163 {164 s.stopDrag();165 squ.x = stage.mouseX - s.x;166 squ.y = stage.mouseY - s.y;167 event.stopPropagation();168 stage.removeEventListener(MouseEvent.MOUSE_MOVE,mouse_move);169 draw_capture();170 }171 //绘制边框172 private function drawRim(obj:Sprite,rect:Rectangle)173 {174 var sx:Number = rect.x;175 var sy:Number = rect.y;176 var sw:Number = rect.width;177 var sh:Number = rect.height;178 obj.graphics.clear();179 obj.graphics.moveTo(sx,sy);180 obj.graphics.lineStyle(0.2,0xff0000,0.5);181 obj.graphics.beginFill(0xffffff,0);182 obj.graphics.drawRect(sx,sy,sw,sh);183 squ.x = sw;184 squ.y = sh;185 }186 //遮罩187 private function drawMask():void188 {189 maskSprite = new Sprite ;190 var g:Graphics = maskSprite.graphics;191 g.beginFill(0x000000,0.5);192 g.drawRect(0,0,390,360);193 load_img.addChild(maskSprite);194 load_img.swapChildren(maskSprite,s);195 }196 private function draw_content():void197 {198 var r:Rectangle = squ.getBounds(s);199 var b = cutOutRect(this._bitmap,r.x + 3,r.y + 3,s.x - this._bitmap.x,s.y - this._bitmap.y);200 if (s.contains(content_bmd))201 {202 s.removeChildAt(0);203 }204 content_bmd.bitmapData =http://www.mamicode.com/ b;205 s.addChildAt(content_bmd,0);206 }207 //在右边缩放框显示图像208 private function draw_capture()209 {210 draw_content();211 init_small.visible = false;212 var r:Rectangle = squ.getBounds(s);213 trace(s.x+" "+s.y+" "+r+" "+s.width+" "+s.height);214 var crop_bmd:Bitmap = cropBitmap(load_img,s.x + 1,s.y + 1,r.x + 3,r.y + 3);215 var bitmapData = http://www.mamicode.com/scaleBitmapData(crop_bmd.bitmapData,105 / r.x + 3,100 /r.y + 3);216 var bitmap:Bitmap = new Bitmap(bitmapData);217 bitmap.width = 105;218 bitmap.height = 100;219 if (gen_img.numChildren > 0)220 {221 gen_img.removeChildAt(0);222 }223 gen_img.addChild(bitmap);224 }225 //方框事件回调226 private function mouse_over1(e:MouseEvent)227 {228 if (e.target is squarePoint || e.target is MovieClip)229 {230 arrow.x = squ.x - 7;231 arrow.y = squ.y - 12;232 arrow.visible = true;233 Mouse.hide();234 }235 }236 private function mouse_out1(e:MouseEvent)237 {238 arrow.visible = false;239 Mouse.show();240 e.stopPropagation();241 }242 private function mouse_down1(e:MouseEvent)243 {244 squ.stage.addEventListener(MouseEvent.MOUSE_MOVE,mouse_move1);245 stage.removeEventListener(MouseEvent.MOUSE_UP,mouse_up1);246 arrow.visible = true;247 Mouse.hide();248 //e.stopPropagation();249 }250 private function mouse_move1(e:MouseEvent)251 {252 arrow.visible = true;253 Mouse.hide();254 squ.removeEventListener(MouseEvent.MOUSE_DOWN,mouse_down1);255 stage.addEventListener(MouseEvent.MOUSE_UP,mouse_up1);256 var rec:Rectangle = new Rectangle ;257 //trace(s.stage.x+" "+s.x);258 rec.x = s.stage.x;259 rec.y = s.stage.y;260 rec.width = stage.mouseX - s.x;261 rec.height = stage.mouseY - s.y;262 //trace(rect);263 arrow.x = stage.mouseX - s.x;264 arrow.y = stage.mouseY - s.y;265 if (rec.width > 0 && rec.height > 0 && rec.x+s.x+ rec.width < this._bitmap.x + this._bitmap.width && rec.y + rec.height + s.y < this._bitmap.y + this._bitmap.height)266 {267 drawRim(s,rec);268 }269 arrow.visible = true;270 draw_content();271 //e.stopPropagation();272 e.updateAfterEvent();273 }274 private function mouse_up1(e:MouseEvent)275 {276 squ.addEventListener(MouseEvent.MOUSE_DOWN,mouse_down1);277 squ.stage.removeEventListener(MouseEvent.MOUSE_MOVE,mouse_move1);278 s.stopDrag();279 arrow.x = stage.mouseX - s.x;280 arrow.y = stage.mouseY - s.y;281 e.stopPropagation();282 arrow.visible = false;283 Mouse.show();284 gen_img.removeChildAt(0);285 draw_capture();286 arrow.x = 0;287 arrow.y = 0;288 }289 //移动方框时重绘方框内图像290 function cropBitmap(ARG_object:DisplayObject,ARG_x:Number,ARG_y:Number,ARG_width:Number,ARG_height:Number):Bitmap291 {292 var cropArea:Rectangle = new Rectangle(0,0,ARG_width,ARG_height);293 var bmpd:BitmapData = http://www.mamicode.com/new BitmapData(ARG_width,ARG_height);294 var croppedBitmap:Bitmap = new Bitmap(bmpd,PixelSnapping.ALWAYS,true);295 var cropMatrix:Matrix = new Matrix ;296 cropMatrix.translate( - ARG_x, - ARG_y);297 bmpd.draw(ARG_object,cropMatrix,null,null,cropArea,true);298 return croppedBitmap;299 }300 //裁剪要上传的图片301 public function cutOutRect(target:DisplayObject,width:Number,height:Number,distanceX:Number,distanceY:Number,transparent:Boolean=true,fillColor:uint=0x00000000):BitmapData302 {303 var m:Matrix = target.transform.matrix;304 m.tx -= target.getBounds(target.parent).x + distanceX;305 m.ty -= target.getBounds(target.parent).y + distanceY;306 var bmpData:BitmapData = http://www.mamicode.com/new BitmapData(width,height,transparent,fillColor);307 bmpData.draw(target,m);308 return bmpData;309 }310 //根据比例缩放311 public function scaleBitmapData(bmpData:BitmapData,scaleX:Number,scaleY:Number):BitmapData312 {313 var matrix:Matrix = new Matrix ;314 matrix.scale(scaleX,scaleY);315 var bmpData_:BitmapData = http://www.mamicode.com/new BitmapData((scaleX * bmpData.width),scaleY * bmpData.height,true,0);316 bmpData_.draw(bmpData,matrix,null,null,null,true);317 return bmpData_;318 }319 //在盒子里缩放320 private function scaleInBox(target:DisplayObject,boxWidth:Number,boxHeight:Number):void321 {322 var scale:Number = Math.min((boxWidth / target.width),boxHeight / target.height);323 target.scaleX = scale;324 target.scaleY = scale;325 }326 }327 }
超少代码的头像裁剪上传
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。