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>
转载于:https://www.cnblogs.com/meteoric_cry/archive/2012/06/29/2569928.html
AS3给图片加水印文字相关推荐
- php 图片加水印文字水印
/*给图片加文字水印的方法*/ $dst_path = 'http://f4.topitme.com/4/15/11/1166351597fe111154l.jpg';//保证路径正确 $dst = ...
- android图片加水印,文字
两种方法:1.直接在图片上写文字String str = "PICC要写的文字";ImageView image = (ImageView) this.findViewById(R ...
- TP5图片加水印(图片水印和文字水印)
TP5使用加水印功能(加图片水印和文字水印) 由于项目需要图片加水印,正好使用TP5框架,下面记录一下使用方法: 1.安装扩展 使用Composer安装ThinkPHP5的图像处理类库: compos ...
- JAVA实现图片加水印及Base64图片字符串加水印
JAVA实现图片加水印及Base64图片字符串加水印 可将根据不同需求选择场景一,场景二来实现家水印操作,个人感觉比我上一遍文章<base64字符串加水印 >实在 场景一: 涉及上送过来的 ...
- 咖啡汪日志——JAVA导出pdf文件加水印 文字+图片、文字
咖啡汪日志--JAVA导出pdf文件加水印 文字和图片.文字 hello,又大家见面了! 作为一只不是在戏精就是在戏精路上的哈士奇,今天要展示给大家的就是如何快捷地给pdf文件增加各种水印.嗷呜呜,前 ...
- php加水印功能,PHP图片加水印功能
本篇文章主要介绍PHP图片加水印功能,感兴趣的朋友参考下,希望对大家有所帮助. 实例代码如下:<?php /** * 功能:给一张图片加上水印效果 * $i 要加水印效果的图片 * $t 水印文 ...
- Java图片处理(二)图片加水印
图片加水印,是通过图片重叠绘制实现的.实现代码如下: public static void press(String pressImg, String pressText, String target ...
- C# 图片加水印例程
using System; using System.IO; using System.Collections; using System.Drawing; using System.Drawing. ...
- 如何给图片加水印?这三个图片加水印方法,帮你添加花式水印
大家有没有这样情况,自己好不容易做好的作品发布到网络平台上结果被他人盗用了,很让人气愤,那我们应该如何避免这种情况呢? 其实我们可以给自己的作品加上一些专属的个性化水印,那小伙伴们知道图片加水印怎么操 ...
最新文章
- 曾经的全国重点大学,如今表现如何?2020年最新排名出炉!
- 激光摄像机的原理及应用
- 【渝粤教育】国家开放大学2018年秋季 0266-22T设计构成 参考试题
- catia钣金根据线段折弯_折弯大神分析钣金折弯下刀顺序
- 监控linux内存,linux 监控系统资源-内存
- keep-alive和多路复用
- 分裂对象模型和TclCL(2)
- Maven学习笔记1
- Atitit.软件开发的几大规则,法则,与原则p821.doc
- 踩坑录·CacheCloud无法启动
- zip与rar的区别
- register int 与 int 的区别
- μCOS-Ⅱ操作系统中的PEND(阻塞zuse)和SUSPEND(挂起)和SLEEP(睡眠)三种状态
- HackTheBox MetaTwo 网站框架CVE获取用户shell和破解私钥提权
- 自动气象站解决方案 案例分享
- 信道划分介质访问控制ALOHA协议CSMA协议CSMA/CD协议轮询访问MAC协议
- w7怎么修改计算机用户名,教您电脑用户名怎么修改
- 几行代码实现用Python输出表情包
- 8psk带宽计算_8PSK 系统的信息传输速率为 1500bit/s ,其无码间干扰传输的最小带宽为 ______ 。_学小易找答案...
- 在线JADE转HTML工具
热门文章
- 迷你信使(MM)的软件设计界面
- Python3学习笔记----环境安装及文本编辑器的选择
- java----数据结构与算法----JavaAPI:Map接口
- Chapter 1 Securing Your Server and Network(9):使用Kerberos用于身份验证
- 网络营销第三课:利用织梦搭建动态网站(2)
- 普加甘特图集成到第三方JS框架(MiniUI、jQuery、Ext等)
- 软件开发人员能力模型
- 前端使用vue-i18n做中英文翻译
- 努力就要晒出来,13周年订阅专栏送图书/T恤晒单集结号!!!
- 使用负载均衡SLB IPv6搞定苹果AppStore审核