zoukankan      html  css  js  c++  java
  • AS3给图片加水印文字

    <需要flash player 10+支持>

    通过FileReference获取选中的图片,调用它的load方法,将图片存入到内存中。使用Loader(flash.display.Loader)类的loadBytes方法,加载图片。

    在点击“加水印”的按钮时,建立两个BitmapData,然后里面分别存放图片和需要添加的文字,之后将两个BitmapData转换为Bitmap添加至舞台,再转成一张新的Bitmap。

    保存图片功能则较为简单了,直接使用FileReference的save方法

    实现的并不完善,缺少例如:选择字体大小、颜色、间距等功能,未提供平铺或是移动文字位置的功能…

    示例代码如下<仅供参考>:

       1: <?xml version="1.0" encoding="utf-8"?>
       2: <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
       3:                 layout="absolute" 
       4:                 minWidth="400" minHeight="600" 
       5:                 creationComplete="inited()" 
       6:                 backgroundColor="#ffffff">
       7:     
       8:     <mx:Style source="theme/vistaremix/vistaremix.css" />
       9:     
      10:     <mx:Script>
      11:         <![CDATA[
      12:             import mx.controls.Alert;
      13:             import mx.core.UIComponent;
      14:             import mx.events.PropertyChangeEvent;
      15:             import mx.graphics.codec.PNGEncoder;
      16:             
      17:             private var file:FileReference;
      18:             private var loader:Loader;
      19:             
      20:             private function inited():void
      21:             {
      22:                 loader = new Loader();
      23:                 loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderDataCompleteHandler);
      24:                 loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loaderProgressHandler);
      25:                 
      26:                 var ui:UIComponent = new UIComponent;
      27:                 
      28:                 addChild(ui);
      29:                 
      30:                 ui.addChild(loader);
      31:                 
      32:                 loader.visible = false;
      33:             }
      34:             
      35:             private function selectPictureHandler():void
      36:             {
      37:                 file = new FileReference();
      38:                 file.addEventListener(Event.SELECT, fileSelectHandler);
      39:                 file.browse(getFileFilterArr());
      40:             }
      41:             
      42:             private function getFileFilterArr():Array
      43:             {
      44:                 return [new FileFilter("Images(*.jpg;*.jpeg;*.png;*.gif)", "*.jpg;*.jpeg;*.png;*.gif")];
      45:             }
      46:             
      47:             private function fileSelectHandler(evt:Event):void
      48:             {
      49:                 file.removeEventListener(Event.SELECT, fileSelectHandler);
      50:                 file.addEventListener(Event.COMPLETE, fileLoadCompleteHandler);
      51:                 file.load();
      52:                 
      53:                 filePathTxt.text = file.name;
      54:             }
      55:             
      56:             private function fileLoadCompleteHandler(evt:Event):void
      57:             {
      58:                 file.removeEventListener(Event.COMPLETE, fileLoadCompleteHandler);
      59:                 loader.loadBytes(file.data);
      60:             }
      61:             
      62:             private function madePictureHandler():void
      63:             {
      64:                 if (loader.content == null)
      65:                 {
      66:                     Alert.show("请先选择要处理的图片","提示");
      67:                     
      68:                     return; 
      69:                 }
      70:                 
      71:                 var ui:UIComponent = new UIComponent();
      72:                 
      73:                 var txt:TextField=new TextField(); 
      74:                 var imgBitmapData:BitmapData = (loader.content as Bitmap).bitmapData.clone();
      75:                 
      76:                 var format:TextFormat = new TextFormat();
      77:                 format.size = 22; 
      78:                 format.bold = true;
      79:                 format.color=0xcc9900;
      80:                 format.align = TextFormatAlign.CENTER;
      81:                 txt.defaultTextFormat = format; 
      82:                 txt.htmlText = contentTxt.text || "形象装"; 
      83:                 txt.width = 170;
      84:                 txt.height = 50;
      85:                 
      86: //                txt.filters = [getTextGlowFilter()];
      87:                 
      88:                 var tempBitMapData:BitmapData = new BitmapData(txt.width, txt.height, true, 0x00000000); 
      89:                 tempBitMapData.draw(txt); 
      90:                 
      91:                 var txtShap:Shape = new Shape(); 
      92:                 txtShap.graphics.beginBitmapFill(tempBitMapData); 
      93:                 txtShap.graphics.drawRect(0,0, tempBitMapData.width, tempBitMapData.height); 
      94:                 txtShap.graphics.endFill(); 
      95:                 txtShap.x=(imgBitmapData.width-tempBitMapData.width) / 2; 
      96:                 txtShap.y=(imgBitmapData.height-tempBitMapData.height) / 2; 
      97: //                txtShap.alpha = .7;
      98:                 
      99: //                txtShap.rotation = 45 + 270;
     100:                 
     101:                 ui.addChild(new Bitmap(imgBitmapData)); 
     102:                 ui.addChild(txtShap); 
     103:                 
     104:                 var newBitmapData:BitmapData = new BitmapData(imgBitmapData.width, imgBitmapData.height, true, 0x00000000); 
     105:                 newBitmapData.draw(ui);
     106:                 
     107:                 var newBitmap:Bitmap = new Bitmap();
     108:                 newBitmap.bitmapData = newBitmapData;
     109:                 
     110:                 previewImg.source = newBitmap;            
     111:             }
     112:             
     113:             private function getTextGlowFilter(col:uint=0x000000,blur:Number=2):GlowFilter
     114:             {
     115:                 var color:uint             = col
     116:                 var alpha:Number        = 1;
     117:                 var blurX:Number        = blur
     118:                 var blurY:Number        = blur
     119:                 var strength:Number     = 255;
     120:                 var quality:Number      = 1     
     121:                 return new GlowFilter(color,alpha,blurX,blurY,strength,quality);      
     122:             }
     123:             
     124:             private function savePictureHandler():void
     125:             {
     126:                 if (loader.content == null || previewImg.source == null)
     127:                 {
     128:                     Alert.show("请先选择要处理的图片","提示");
     129:                     
     130:                     return; 
     131:                 }
     132:                 
     133:                 var pngenc:PNGEncoder = new PNGEncoder();
     134:                 
     135:                 var bitmapData:BitmapData = (previewImg.source as Bitmap).bitmapData.clone();
     136:                 
     137:                 var imgByteArray:ByteArray = pngenc.encode(bitmapData);
     138:                 
     139:                 var _file:FileReference = new FileReference();
     140:                 _file.addEventListener(Event.COMPLETE, downloadCompleteHandler);
     141:                 _file.save(imgByteArray, "_" + filePathTxt.text);
     142:             }
     143:             
     144:             private function downloadCompleteHandler(evt:Event):void
     145:             {
     146:                 Alert.show("图片已保存成功","提示");
     147:             }
     148:             
     149:             private function loaderDataCompleteHandler(evt:Event):void
     150:             {
     151:                 var bitmapData:BitmapData = new BitmapData(loader.width, loader.height, true, 0x00FFFFFF);
     152:                 
     153:                 bitmapData.draw(loader.content);
     154:                 
     155:                 var bitmap:Bitmap = new Bitmap();
     156:                 bitmap.bitmapData = bitmapData;
     157:                 
     158:                 previewImg.source = bitmap;
     159:             }
     160:             
     161:             private function loaderProgressHandler(evt:ProgressEvent):void
     162:             {
     163:                 var percent:Number = evt.bytesLoaded / evt.bytesTotal;
     164:                 
     165:                 percent *= 100;
     166:                 
     167:                 var msg:String = "正在加载:" + percent + "%";
     168:                 
     169:                 trace(msg);                
     170:             }
     171:             
     172:         ]]>
     173:     </mx:Script>
     174:     
     175:     
     176:     <mx:VBox width="100%" height="100%" paddingLeft="20" verticalGap="5">
     177:         
     178:         <mx:HBox width="100%" paddingTop="20" horizontalGap="5">
     179:             
     180:             <mx:TextInput id="filePathTxt" width="300" editable="false" />
     181:             
     182:             <mx:Button label="选择图片" id="selectBtn" click="selectPictureHandler()" />
     183:             
     184:         </mx:HBox>
     185:         
     186:         <mx:HBox width="100%" horizontalGap="5" verticalAlign="top">
     187:             
     188:             <mx:TextArea id="contentTxt" width="300" />
     189:             
     190:             <mx:Button label="加水印" id="madeBtn" click="madePictureHandler()" />
     191:             
     192:             <mx:Button label="保存图片" id="saveBtn" click="savePictureHandler()" />
     193:             
     194:         </mx:HBox>
     195:         
     196:         <mx:Canvas width="350" height="500" id="imgContainer" left="20" top="60" 
     197:                    borderColor="#3399cc" borderThickness="1" borderStyle="solid" >
     198:             
     199:             <mx:Image id="previewImg" horizontalAlign="0" verticalCenter="0" />
     200:             
     201:         </mx:Canvas>
     202:         
     203:     </mx:VBox>
     204:     
     205: </mx:Application>
  • 相关阅读:
    pushlet 模式设定和session超时设定
    sql 排名
    Create Async Tree 的使用
    SQL 高级查询 50题
    pushlets 网址
    jsp 页面解析json字符串
    响应式WEB设计
    上传图片 并生成缩略图的 例子 C#.net
    profile 实现购物车 实例 (二)
    profile 实现购物车 实例(一)
  • 原文地址:https://www.cnblogs.com/meteoric_cry/p/2569928.html
Copyright © 2011-2022 走看看