//////////////////////////////////////////////////////////////////////////////////////////////////////////
//
功能注:转换BitmapData成JPG,用SWFKit打包后不需要服务器和其它外部控件支持既可直接在本地生成图片
//
汇源者:大盗二十八
//
拓展注:读取,混淆,生成,还原任意二进制文件,其它您能想到的,前提是自己清楚加密算法哈
//
用法注:第一步,Flash cs3,建立一个包含图片的mc,然后删除,再在库中设置该mc的链接名为"mc",拖个Button组件到库中,在场景第一帧加上as;
//
用法注:第二步,SWFKit Pro3.4(3.2版本也可),导入swf后,在Scripts窗口右上方Items处下拉条选择Initialize,然后粘贴属于FFish的函数代码。
//////////////////////////////////////////////////////////////////////////////////////////////////////////
/
import
flash.display.Sprite;
import
fl.controls.Button;
import
flash.events.MouseEvent;
import
mx.graphics.codec.JPEGEncoder;
import
Base64;
import
SWFKit.
*
;
var P_Btn1: Button;
var P_Btn2: Button;
var P_line: Sprite;
var P_Box : Sprite;
var P_Pic
=
new
mc();
function Paint_it() {
P_Btn1
=
new
Button();
P_Btn1.y
=
350
;
P_Btn1.x
=
5
;
P_Btn1.label
=
"
清除
"
;
P_Btn2
=
new
Button();
P_Btn2.y
=
390
;
P_Btn2.x
=
5
;
P_Btn2.label
=
"
保存
"
;
addChild(P_Btn1);
addChild(P_Btn2);
P_Btn1.addEventListener(MouseEvent.MOUSE_DOWN, P_Clear);
P_Btn2.addEventListener(MouseEvent.MOUSE_DOWN, P_Save);
addEventListener(MouseEvent.MOUSE_DOWN, P_Down);
addEventListener(MouseEvent.MOUSE_UP, P_Up);
P_Box
=
new
Sprite();
P_line
=
new
Sprite();
P_line.graphics.lineStyle(
5
,
0xffcc00
);
addChild(P_Box);
P_Box.addChild(P_Pic);
P_Pic.addChild(P_line);
P_Pic.x
=
110
;
P_Pic.y
=
5
;
}
function P_Clear(event:MouseEvent):
void
{
event.stopPropagation();
//
看帮助吧,很详尽,呵呵。
P_line.graphics.clear();
P_line.graphics.lineStyle(
5
,
0xffcc00
);
}
function P_Save(event:MouseEvent):
void
{
event.stopPropagation();
var P_Bmp:BitmapData
=
new
BitmapData(P_Pic.width, P_Pic.height);
P_Bmp.draw(P_Pic);
var P_Jpg:JPEGEncoder
=
new
JPEGEncoder(
75
);
var P_Byte:ByteArray
=
P_Jpg.encode(P_Bmp);
var encoded:String
=
Base64.encodeByteArray(P_Byte);
ExternalInterface.call(
"
saveByte
"
, encoded);
//
直接调用SWFKit的FFish Script语言Initialize标签saveByte函数,传递字符串。
//
这个是两软件交换数据之处!
}
function P_Down(event:MouseEvent):
void
{
addEventListener(MouseEvent.MOUSE_MOVE, P_Move);
P_line.graphics.moveTo(mouseX
-
110
, mouseY);
}
function P_Move(event:MouseEvent):
void
{
P_line.graphics.lineTo(mouseX
-
110
, mouseY);
}
function P_Up(event:MouseEvent):
void
{
removeEventListener(MouseEvent.MOUSE_MOVE, P_Move);
}
Paint_it();
//////////////////////////////////////////////////////////
/
//
以下代码请写到SWFKit的Scripts里Items的Initialize内:
////////////////////////////////////////////////////////////
//
Initialize
//
getAdditionalFile();
//
return true;
function saveByte(file) {
var converter
=
new
Base64();
var newStream
=
converter.decode(file);
var dlg
=
new
Dialogs;
var output
=
dlg.fileSave(
"
JPG Files(*.jpg)|*.jpg|All Files(*.*)|*.*|
"
,
"
jpg
"
,
"
bitmap_jpg.jpg
"
);
newStream.saveToFile(output);
}
function Base64()
{
this
.keyStr
=
"
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
"
;
function readByte(input)
{
var ch
=
input.get();
if
(input.eof)
return
NaN;
return
ch;
}
function encode(input)
{
var output
=
new
StringStream;
var chr1, chr2, chr3 ;
var enc1, enc2, enc3, enc4;
do
{
chr1
=
this
.readByte(input);
chr2
=
this
.readByte(input);
chr3
=
this
.readByte(input);
enc1
=
chr1
>>
2
;
enc2
=
((chr1
&
3
)
<<
4
)
|
(chr2
>>
4
);
enc3
=
((chr2
&
15
)
<<
2
)
|
(chr3
>>
6
);
enc4
=
chr3
&
63
;
if
(isNaN(chr2))
{
enc3
=
enc4
=
64
;
}
else
if
(isNaN(chr3))
{
enc4
=
64
;
}
output.write(
this
.keyStr.charAt(enc1)
+
this
.keyStr.charAt(enc2)
+
this
.keyStr.charAt(enc3)
+
this
.keyStr.charAt(enc4));
}
while
(
!
input.eof);
return
output;
}
function decode(input)
{
var output
=
new
StringStream;
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i
=
0
;
var base64test
=
new
RegExp(
"
[^A-Za-z0-9+/=]
"
,
"
g
"
);
if
(base64test.exec(input))
{
trace(
"
Base64.decode:
"
,
"
invalid input string
"
);
return
null
;
}
do
{
enc1
=
this
.keyStr.indexOf(input.charAt(i
++
));
enc2
=
this
.keyStr.indexOf(input.charAt(i
++
));
enc3
=
this
.keyStr.indexOf(input.charAt(i
++
));
enc4
=
this
.keyStr.indexOf(input.charAt(i
++
));
chr1
=
(enc1
<<
2
)
|
(enc2
>>
4
);
chr2
=
((enc2
&
15
)
<<
4
)
|
(enc3
>>
2
);
chr3
=
((enc3
&
3
)
<<
6
)
|
enc4;
output.put(String.fromCharCode(chr1));
if
(enc3
!=
64
)
{
output.put(String.fromCharCode(chr2));
}
if
(enc4
!=
64
)
{
output.put(String.fromCharCode(chr3));
}
}
while
(i
<
input.length);
return
output;
}
}