AS3给图片加水印文字

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

 

<需要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>
目录
相关文章
|
11月前
|
编解码 开发工具 Android开发
.9图片的那点事儿
.9图片的那点事儿
146 0
|
编解码 Windows
用文字制作成图片
最近呢,我一个朋友要过生日,我像给她一个硬核的生日祝福。然后就想到了用文字拼成她的QQ头像
116 0
用文字制作成图片
|
Linux 数据安全/隐私保护 Windows
Stegosuite,图片隐写术
版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396511 ...
1347 0
|
缓存 Java 数据安全/隐私保护
给图片加水印?这是我见过最简单的实现方式
大家好,我是指北君。 在项目中经常有需要在图片上添加水印的需求以及在某些场合下需要身份证图片,这时就可以对身份证上加水印防止被用于其他用途,java 在处理图片水印时不需要额外的第三方包,使用 BufferedImage 和 Graphics2D 就可以搞定
给图片加水印?这是我见过最简单的实现方式
|
前端开发 Android开发 数据安全/隐私保护
Android图片添加文字水印并保存水印文字图片到指定文件
Android图片添加文字水印并保存水印文字图片到指定文件 package zhangphil.test; import android.
2897 0
|
安全 数据安全/隐私保护
|
Java 数据安全/隐私保护
|
C# 图形学 数据安全/隐私保护