zoukankan      html  css  js  c++  java
  • actionscript3头像裁剪上传

    效果:

      

    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 = 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 = _encoder.encode(bitmapData);
     77             var req:URLRequest = new URLRequest("http://localhost/youtube/util/upload.php");
     78             req.data = 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):void
    103         {
    104             fileRef1.browse(getFilterTypes());
    105             fileRef1.addEventListener(Event.SELECT,selectHandler);
    106         }
    107         private function getImagesFilter():FileFilter
    108         {
    109             return new FileFilter("images(*.jpg, *.gif, *.png, *.jpg)","*.jpg;*.jpeg;*.gif;*.png");
    110         }
    111         private function getFilterTypes():Array
    112         {
    113             return [getImagesFilter()];
    114         }
    115         private function selectHandler(event:Event):void
    116         {
    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, onLoaded1);
    123             load_img.reload.visible=false;
    124             fileRef1.removeEventListener(Event.COMPLETE, arguments.callee);
    125             });
    126         }
    127         //载人图像 
    128         private function onLoaded1(e:Event):void
    129         {
    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):void
    156         {
    157             //trace(rect1);
    158             //trace(s.width+" "+s.height);
    159             draw_content();
    160             //event.updateAfterEvent();
    161         }
    162         private function mouse_up(event:MouseEvent):void
    163         {
    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():void
    188         {
    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():void
    197         {
    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 = 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 = 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_Number,ARG_height:Number):Bitmap
    291         {
    292             var cropArea:Rectangle = new Rectangle(0,0,ARG_width,ARG_height);
    293             var bmpd:BitmapData = 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,Number,height:Number,distanceX:Number,distanceY:Number,transparent:Boolean=true,fillColor:uint=0x00000000):BitmapData
    302         {
    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 = 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):BitmapData
    312         {
    313             var matrix:Matrix = new Matrix  ;
    314             matrix.scale(scaleX,scaleY);
    315             var bmpData_:BitmapData = 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):void
    321         {
    322             var scale:Number = Math.min((boxWidth / target.width),boxHeight / target.height);
    323             target.scaleX = scale;
    324             target.scaleY = scale;
    325         }
    326     }
    327 }

     转载请注明:http://www.cnblogs.com/TheViper

     

  • 相关阅读:
    使用PyOpenGL,调用glutInit时TypeError: 'NoneType' object is not callable
    vsphere client创建与克隆虚拟机
    python 中文编码处理方法
    AFL使用
    UAF学习原理及利用
    两个不错的小功能,提升效率,记录一下
    Linux 进程信息收集与行为分析
    SULLEY安装与使用
    New life I would like
    呼唤程序员精神——关于我今天发起的讨论的总结
  • 原文地址:https://www.cnblogs.com/TheViper/p/4059438.html
Copyright © 2011-2022 走看看