[Flash]视频照相系列教程之三

到了这一步,基本上算是差不多了,在大体的框架上,就剩下预览与保存的做法了。
       第一步:预览
       在我们已经把视频,TileList组装完成后,就需要实现一个功能,就是我们需要重新预览下以前拍的照片,那么由此所引申出来的动作必然就是我们需要点 击在TileList里的小图,这一步很简单,我们先来玩一个TileList点击的小代码,后面就套一下,就很容易了。
      按照第二部分,认识TileList刚开始的那段小代码,新的代码如下:

import fl.events.ListEvent;
var i:uint;
for(i=0;i<10;i++){
  var tempMc:Object= new Object();
  tempMc.label = "PIC"+i;
  tempMc.source = new mc();
  lists.addItem(tempMc);
  
}
lists.addEventListener(ListEvent.ITEM_CLICK,thumbClick);
function thumbClick(event:ListEvent):void{
  trace(event.item.label);
}

  
      从上面简单的代码,就能知道在TileList里单击其中的图标,该怎么去实现。


      好,那么重新我们回到原来的例子上,我们已经知道TileList点击怎么实现,那么我们需要在舞台上放一个空的实例,用于加载点击图标后,传输过来的具体内容,我们这里只需要图,别的不需要。当然你可以同样传送其他信息。
      我的打算是新的预览实例放在X轴为340,Y轴为0,同时在舞台上再放一个BUTTON,实例名:down_btn,用于保存事件的触发
      预览的做法也是跟截图的做法一样,用Bitmap,和BitmapData,在前面的教程代码上继续加代码:

import fl.events.ListEvent;
var review:Sprite;
function thumbClick(event:ListEvent):void {
  var bmd:BitmapData=new BitmapData(320,240);
  bmd.draw(event.item.source);
  var bit:Bitmap=new Bitmap(bmd);
  review = new Sprite();
  addChild(review);
  review.x = 340;
  review.addChild(bit);
  //用于下载当前的图片
  //down_btn.addEventListener(MouseEvent.CLICK,downJpg);
}

       这样,这部分的功能算是完成了,也不难。下一部分的内容在于把当前的图保存到本地上,这个有很多方法,我说的是其中一种,但是大体的思路都是一样的。我先说下我的思路。
      还记得我以前写的Flash简易聊天室教程里的三板斧教程吗? 这个主要讲的是FLASH里的数据传输到外部服务器的,这里我要保存图片,那么也是把当前的图片数据传输出去,那么我们就需要CORDLIB里的一个 类:JPGEncoder类,把当前的图片数据转化成ByteArray,传输出去,如果你像我用的是PHP的话,就可以用PHP把ByteArray写 到本地上,变回原来的图片。


  
       第二步:保存
       首先我们要去http://code.google.com/p/as3corelib/把JPGEncoder类下下来。
       然后下一步就是继续完成down_btn按钮触发的下载事件构造函数:downJpg  
      

import flash.utils.ByteArray;
import com.adobe.encoding.JPEGEncoder;
function downJpg(event:MouseEvent):void {
  //?name=@@@@@@就是设置下载下来的图片名字,这个可以根据你自己想要的来修改。
  var url:String="http://localhost/downjpg.php?name=testJpg.jpg";
  var bmd:BitmapData = new BitmapData(320,240);
  bmd.draw(review);
  //下载截图质量设置
  var jpgEncoder:JPEGEncoder=new JPEGEncoder(100);
  var myByteArray:ByteArray=jpgEncoder.encode(bmd);
  
  //发送数据到PHP服务器端,然后自动弹出,我下面会提供一个PHP文件,供你测试,反正
  //根据我以前的做的很多东西来看,方法有N多。这是其中之一
  var header:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream");
  var request:URLRequest=new URLRequest(url);
  request.requestHeaders.push(header);  
  request.method=URLRequestMethod.POST;
  request.data=myByteArray;
  
  var loader:URLLoader = new URLLoader();
  navigateToURL(request, "_blank");
}

PHP端的代码:

<?php
if ( isset ( $GLOBALS["HTTP_RAW_POST_DATA"] )) {
  $im = $GLOBALS["HTTP_RAW_POST_DATA"];
  header('Content-Type: image/jpeg');
  header("Content-Disposition: attachment; filename=".$_GET['name']);
  echo $im;  
}  else echo 'An error occured.';
?>

      你能测试出来吗?如果在下载弹出有错误的时候,你可以按F12发布,在网页上直接来试试。基本上,我这里是测试成功了。



      这个系列的教程算是圆满结束了,大体的框架我已经算是讲完了,当然小细节还有很多要做,这个就需要你去努力了。因为我最近时间不多,写的可能比较匆忙,有什么地方不对,或者你看不懂,你可以发E-MAIL给我,注意是E-MAIL。

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏