请选择 进入手机版 | 继续访问电脑版
收藏本站腾讯微博新浪微博
点点网模板设计大赛 phpchina

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 用悬赏 三天解决问题 解决访问速度慢 论坛支持农历生日 - 给官方提建议

论坛活动及任务 归纳网站最新活动 地图任务 邮件更新任务:保护帐号安全

积分换实物,来参加蓝色理想积分兑换吧! 联系招聘客服 蓝色理想帮你找工作! 万元奖励等你拿——点点网模板设计大赛

查看: 3304|回复: 11

[AS3] SWFKit+BitmapData,生成本地JPG [复制链接]

dao28 楼主
帖子
199
体力
367
威望
9
居住地
重庆市 南岸区
发表于 2008-8-6 09:01:40 |显示全部楼层
功能:SWFKit+BitmapData=>生成本地图片,不需要服务器环境 or 其它控件
流程:涂鸦->BitmapData->ByteArray->JPGEncode->SWFKit->JPG
适用:偶这样的不懂c++,vc,vb的人群哈

源帖:SWFKit能将flash的bitmapDate保存成jpg文件吗
作者:lostfire98
引用:FFish Script base64 函数
引用:base64类
版权:SWFKit Pro 3.4

效果打包EXE,不含源文件,感兴趣的朋友请利用以下源码

  1. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. //功能注:转换BitmapData成JPG,用SWFKit打包后不需要服务器和其它外部控件支持既可直接在本地生成图片
  3. //汇源者:大盗二十八
  4. //拓展注:读取,混淆,生成,还原任意二进制文件,其它您能想到的,前提是自己清楚加密算法哈
  5. //用法注:第一步,Flash cs3,建立一个包含图片的mc,然后删除,再在库中设置该mc的链接名为"mc",拖个Button组件到库中,在场景第一帧加上as;
  6. //用法注:第二步,SWFKit Pro3.4(3.2版本也可),导入swf后,在Scripts窗口右上方Items处下拉条选择Initialize,然后粘贴属于FFish的函数代码。
  7. ///////////////////////////////////////////////////////////////////////////////////////////////////////////
  8. import flash.display.Sprite;
  9. import fl.controls.Button;
  10. import flash.events.MouseEvent;

  11. import mx.graphics.codec.JPEGEncoder;
  12. import Base64;
  13. import SWFKit.*;

  14. var P_Btn1: Button;
  15. var P_Btn2: Button;
  16. var P_line: Sprite;
  17. var P_Box : Sprite;
  18. var P_Pic = new mc();

  19. function Paint_it() {
  20.         P_Btn1 = new Button();
  21.         P_Btn1.y = 350;
  22.         P_Btn1.x = 5;
  23.         P_Btn1.label = "清除";

  24.         P_Btn2 = new Button();
  25.         P_Btn2.y = 390;
  26.         P_Btn2.x = 5;
  27.         P_Btn2.label = "保存";
  28.         addChild(P_Btn1);
  29.         addChild(P_Btn2);
  30.        
  31.         P_Btn1.addEventListener(MouseEvent.MOUSE_DOWN, P_Clear);
  32.         P_Btn2.addEventListener(MouseEvent.MOUSE_DOWN, P_Save);

  33.         addEventListener(MouseEvent.MOUSE_DOWN, P_Down);
  34.         addEventListener(MouseEvent.MOUSE_UP, P_Up);

  35.         P_Box = new Sprite();
  36.         P_line = new Sprite();
  37.         P_line.graphics.lineStyle(5,0xffcc00);

  38.         addChild(P_Box);
  39.         P_Box.addChild(P_Pic);
  40.         P_Pic.addChild(P_line);
  41.         P_Pic.x = 110;
  42.         P_Pic.y = 5;
  43. }

  44. function P_Clear(event:MouseEvent):void {
  45.         event.stopPropagation();//看帮助吧,很详尽,呵呵。
  46.        
  47.         P_line.graphics.clear();
  48.         P_line.graphics.lineStyle(5,0xffcc00);
  49. }
  50. function P_Save(event:MouseEvent):void {
  51.         event.stopPropagation();
  52.        
  53.         var P_Bmp:BitmapData  = new BitmapData(P_Pic.width, P_Pic.height);
  54.         P_Bmp.draw(P_Pic);
  55.        
  56.         var P_Jpg:JPEGEncoder = new JPEGEncoder(75);
  57.         var P_Byte:ByteArray = P_Jpg.encode(P_Bmp);
  58.        
  59.         var encoded:String = Base64.encodeByteArray(P_Byte);

  60.         ExternalInterface.call("saveByte", encoded);//直接调用SWFKit的FFish Script语言Initialize标签saveByte函数,传递字符串。
  61. //[color=Red]这个是两软件交换数据之处![/color]

  62. }

  63. function P_Down(event:MouseEvent):void {
  64.         addEventListener(MouseEvent.MOUSE_MOVE, P_Move);
  65.         P_line.graphics.moveTo(mouseX-110, mouseY);
  66. }

  67. function P_Move(event:MouseEvent):void {
  68.         P_line.graphics.lineTo(mouseX-110, mouseY);
  69. }

  70. function P_Up(event:MouseEvent):void {
  71.         removeEventListener(MouseEvent.MOUSE_MOVE, P_Move);
  72. }

  73. Paint_it();

  74. ///////////////////////////////////////////////////////////
  75. //以下代码请写到SWFKit的Scripts里Items的Initialize内:
  76. ////////////////////////////////////////////////////////////
  77. //Initialize
  78. //getAdditionalFile();
  79. //return true;
  80. function saveByte(file) {
  81.     var converter = new Base64();
  82.     var newStream = converter.decode(file);
  83.         var dlg = new Dialogs;
  84.         var output = dlg.fileSave("JPG Files(*.jpg)|*.jpg|All Files(*.*)|*.*|", "jpg","bitmap_jpg.jpg");
  85.     newStream.saveToFile(output);
  86. }
  87. function Base64()
  88. {
  89.    this.keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  90.    function readByte(input)
  91.    {
  92.       var ch = input.get();
  93.       if (input.eof) return NaN;      
  94.       return ch;
  95.    }
  96.    function encode(input)
  97.       {
  98.        var output = new StringStream;
  99.        var chr1, chr2, chr3 ;
  100.        var enc1, enc2, enc3, enc4;
  101.        do
  102.        {
  103.          chr1 = this.readByte(input);
  104.          chr2 = this.readByte(input);
  105.          chr3 = this.readByte(input);

  106.          enc1 = chr1 >> 2;
  107.          enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
  108.          enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
  109.          enc4 = chr3 & 63;

  110.          if (isNaN(chr2))
  111.          {
  112.             enc3 = enc4 = 64;
  113.          }
  114.          else if (isNaN(chr3))
  115.          {
  116.             enc4 = 64;
  117.          }
  118.          output.write(this.keyStr.charAt(enc1) + this.keyStr.charAt(enc2) +
  119.                this.keyStr.charAt(enc3) + this.keyStr.charAt(enc4));               
  120.          } while (!input.eof);
  121.          return output;
  122.      }
  123.      function decode(input)
  124.       {
  125.          var output = new StringStream;
  126.          var chr1, chr2, chr3;
  127.          var enc1, enc2, enc3, enc4;
  128.          var i = 0;
  129.          
  130.          var base64test = new RegExp("[^A-Za-z0-9+/=]", "g");
  131.          if (base64test.exec(input))
  132.          {
  133.             trace("Base64.decode: ", "invalid input string");
  134.             return null;
  135.          }
  136.          do
  137.          {
  138.             enc1 = this.keyStr.indexOf(input.charAt(i++));
  139.             enc2 = this.keyStr.indexOf(input.charAt(i++));
  140.             enc3 = this.keyStr.indexOf(input.charAt(i++));
  141.             enc4 = this.keyStr.indexOf(input.charAt(i++));
  142.             
  143.             chr1 = (enc1 << 2) | (enc2 >> 4);
  144.             chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
  145.             chr3 = ((enc3 & 3) << 6) | enc4;
  146.             
  147.             output.put(String.fromCharCode(chr1));
  148.             
  149.             if (enc3 != 64)
  150.             {
  151.                output.put(String.fromCharCode(chr2));
  152.             }            
  153.             if (enc4 != 64)
  154.             {
  155.                output.put(String.fromCharCode(chr3));
  156.             }
  157.          } while (i < input.length);
  158.          return output;
  159.    }
  160. }
复制代码


截图:



希望对大家有用,呵呵呵*^_^*

[ 本帖最后由 dao28 于 2008-8-6 09:05 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
DO & do, so u do success!
西部数码顶级域名注册商39元抢注!
dao28 楼主
帖子
199
体力
367
威望
9
居住地
重庆市 南岸区
发表于 2008-8-6 09:11:27 |显示全部楼层

和MDM.Zinc.3.0比较:

MDM.Zinc.3.0在处理二进制字节上,跟AS3结合的时候,同样的这个案例,代码仅三句,不必结合base64,只需要生成ByteArray.readUnsignedByte()后的字符串,然后按照她内定的格式书写,就可以直接转存成需要的文件了

今天加个图示,方便下初次使用SWFKit的朋友:

第一步:


第二步:


第三步:


[ 本帖最后由 dao28 于 2008-8-7 14:59 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
DO & do, so u do success!
租服务器,上51IDC | [长沙]招聘:PHP经理10K/WEB前端6K/PHP开发6K

使用道具 举报

libins 

湘农青年

版主 手机认证 

帖子
4762
体力
7297
威望
11
居住地
广东省 广州市
发表于 2008-8-6 09:28:46 |显示全部楼层
好东西收藏先,帮顶~
以后本地保存涂鸦的话,可以直接拿来改改就可以了。

使用道具 举报

jinni 

荣誉管理 手机认证 

帖子
10075
体力
13013
威望
166
发表于 2008-8-6 11:24:02 |显示全部楼层
用AIR多省事

微博
莫把无知当武器

使用道具 举报

帖子
15
体力
37
威望
0
发表于 2008-8-7 14:00:57 |显示全部楼层
是好东西 但是还是有点不会用阿

使用道具 举报

dao28 楼主
帖子
199
体力
367
威望
9
居住地
重庆市 南岸区
发表于 2008-8-7 14:56:35 |显示全部楼层

回复 jinni 在 4# 的帖子

哈,没研究过哈。有用得上的时候研究下。
DO & do, so u do success!

使用道具 举报

帖子
6
体力
34
威望
0
发表于 2008-9-5 15:08:47 |显示全部楼层
请问楼主,为什么我在SWFKIT3.2或3.4中使用
var inputDialog = new Form;
inputDialog.movie = getMovies()[1];
inputDialog.showCaption = true;
inputDialog.canDrag = true;
inputDialog.caption = "test";
功能,DEBUG时总是弹出一个错误提示框说:
debug assertion failed!
program:......g\LOCALS~1\Temp............\pp.exe
file;;
是什么原因呢,如果直接打包也能通过,但是没有按脚本弹出相应porm,
从官网上下载它的实例,也是同样的错误,只是他自己的打包EXE却是正常!

使用道具 举报

dao28 楼主
帖子
199
体力
367
威望
9
居住地
重庆市 南岸区
发表于 2008-9-6 11:32:20 |显示全部楼层
inputDialog.movie =路径+"打开文件.swf";

总之就是一个路径问题
DO & do, so u do success!

使用道具 举报

帖子
6
体力
34
威望
0
发表于 2008-9-6 17:11:10 |显示全部楼层
两个swf文件都打包在同根目录中,也要路径吗?先试试,谢谢楼主!

使用道具 举报

jubupx 
帖子
41
体力
79
威望
0
居住地
广东省 深圳市
发表于 2008-9-7 01:49:55 |显示全部楼层
fp10 ,FileReference.save

使用道具 举报

HBrO 
帖子
7398
体力
32121
威望
241
居住地
广东省 广州市
发表于 2008-9-8 02:49:29 |显示全部楼层
原帖由 jubupx 于 2008-9-7 01:49 发表
fp10 ,FileReference.save

这是不是在重蹈覆辙呢......
当然,如果一定要出对话框,安全性还是可以的,不过这也不爽哦

使用道具 举报

dao28 楼主
帖子
199
体力
367
威望
9
居住地
重庆市 南岸区
发表于 2008-9-8 15:16:17 |显示全部楼层
天啦,HBrO来广州了,你让我们怎么混啊。强烈抗议!
DO & do, so u do success!

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|安久科技提供CDN|blueidea.com ( 京ICP备05002321号 )  

GMT+8, 2012-2-13 13:05 , Processed in 0.150590 second(s), 10 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部