-
2008-07-03
[翻译]ActionScript 3 Jpeg Encoder实例:保存flash中的图片 - [flash开发]
有了actionscript3,有许多不可思议的图片操作都可以实现。能把flash中的显示对象转换成一张jpeg图片就是其中之一,这要感谢在AS3 Core Library(一个as3开源库)中所提供的JPEG格式编译类,有了它,要实现前面的那个构想将变得十分简单。在下文中,我将向你展示如何编写一个flash,使他能够把movieclip转换为一张jpeg图片并可以下载到用户电脑。
为了给你一个程序的大体概念,请试试下面的这个画图板。
首先要做的重要准备
在我们开始之前,取保你已经下载了ActionScript 3 Core Library。这个核心库包涵了许多类和功能模块,他们提供了诸如MD5,日期格式化,图像编码等功能(这里只列举了其中几个)。当你获得了这个库之后,你只需要把它放到你的类文件夹中,就可以使用它提供的这些功能了。现在我们可以导入JPGEncoder这个类了。
import com.adobe.images.JPGEncoder;编译一个MovieClip
在这个例子中,我们假设我们感兴趣的那个MovieClip名为sketch_mc,为了能使用JPGEncoder进行操作,我们需要先把MovieClip转换为一个Bitmap对象。要实现这一步,我们将使用到BitmapData这个类。该类的构造函数需要两个参数,宽和高。因为我们想要这张jpeg图片的大小和sketch_mc的大小一样,所以我们用sketch_mc的宽高属性。然后通过传递sketch_mc参数给draw方法,我们的MovieClip就转换为一个Bitmap对象了。
import com.adobe.images.JPGEncoder;var jpgSource:BitmapData = new BitmapData (sketch_mc.width, sketch_mc.height);jpgSource.draw(sketch_mc);现在sketch_mc的图像已经有位图实例了,我们就可以使用JPGEncoder了。在创建这个类的一个新实例的时候,你可以通过传递1-100的数字参数来设置图片压缩的等级。接下来我们来创建jpeg图片,调用encode方法,并且把上面的位图实例作为参数传递进去。该方法将以ByteArray的数据格式返回jpeg,可见这个类和AS3中其他操作二进制数据的类一样简单方便。
import com.adobe.images.JPGEncoder;var jpgSource:BitmapData = new BitmapData (sketch_mc.width, sketch_mc.height);jpgSource.draw(sketch_mc);var jpgEncoder:JPGEncoder = new JPGEncoder(85);var jpgStream:ByteArray = jpgEncoder.encode(jpgSource);从Flash Player到硬盘
ActionScript 3已经完成了所有将MovieClip转换为jpeg的必要工作,但是现在还需要一些小步骤来实习图片的下载。为此我们需要用URLRequest这个类把我们得到的二进制数据传递给服务器端的脚步。因为我们post的是二进制数据,所以必须设置content-type为“application/octet-stream”。当然,当图片被下载的时候它还需要一个名字,所以我们同样需要把这个参数作为查询字符床也传递给服务器端的脚步。
import com.adobe.images.JPGEncoder;var jpgSource:BitmapData = new BitmapData (sketch_mc.width, sketch_mc.height);jpgSource.draw(sketch_mc);var jpgEncoder:JPGEncoder = new JPGEncoder(85);var jpgStream:ByteArray = jpgEncoder.encode(jpgSource);var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");var jpgURLRequest:URLRequest = new URLRequest("jpg_encoder_download.php?name=sketch.jpg");jpgURLRequest.requestHeaders.push(header);jpgURLRequest.method = URLRequestMethod.POST;jpgURLRequest.data = jpgStream;navigateToURL(jpgURLRequest, "_blank");下面是我们的jpg数据将要post去的php页面的脚步。我选择php作为例子,但其实任何服务器端的脚步都是可以的。
if (isset($GLOBALS["HTTP_RAW_POST_DATA"])){// get bytearray$jpg = $GLOBALS["HTTP_RAW_POST_DATA"];// add headers for download dialog-boxheader(’Content-Type: image/jpeg’);header(”Content-Disposition: attachment; filename=”.$_GET['name']);echo $jpg;} -
2007-05-12
[翻译]如何用flash创建全屏播放影片 - [flash开发]
如何用flash创建全屏播放影片
这段时间在做flash开发,遇到全屏播放的问题。找遍了国内大小网站都没找到相应解决方法,最后只好求助于google(en),在一个名为Julian Pscheid的外国友人的blog上找到这篇文章,故翻译过来为国人享用。
【原文地址】Julian Pscheid
http://julian.empiregn.com/2007/2/22/How-to-create-true-fullscreen-movies-with-Flash
【译文如下】Tom.Y
Flash Player的 9.0.28版本是第一个支持真正意义全屏播放的flash player版本,不幸的是这完美的特性在Flash 9出来之前都没有得到完全的支持,不过只需要细微的修改,您就可以在Flash 8上使用这个特性了。下面简单的指南将帮助您用Flash8实现正真的全屏。
在开始之前,请确定您正在使用的flash player是最新的9.0.28版,先前版本的Flash Player 9 (9,0,16,0 &9,0,20,0)还不支持这一特性。你需要升级至9.0.28.0, 他也是第一个可以在Vista上运行的版本。
这一性特性的关键之处在于使用到ActionScript中Satge对象的一个新属性'displayState',这一属性有两个值:
'fullScreen': 设置舞台全屏播放。
'normal': 默认值。
在您开始使用该属性之前,您还需要在您的Flash 8的安装文件中做一些修改,在你的安装环境下找到下列文件
Flash 8\en\First Run\Classes\FP8\Stage.as
打开文件,把这条语句加进去:static var displayState:String;如下所示:
intrinsic class Stage
{
static var displayState:String;
static var align:String;
static var height:Number;
static var scaleMode:String;
static var showMenu:Boolean;
static var width:Number;
static function addListener(listener:Object):Void;
static function removeListener(listener:Object):Boolean;
}
现在你可以在flash中设置displayState这个属性的值了。出于安全考虑,flash之允许displayState这个属性在与用户交互的过程中被设置,意思就是:你不能让影片一全屏模式打开。你需要添加一个按钮或其他元件来捕获用户的操作以便把影片切换至全屏状态。在我的例子里,我就简单的创建了一个按钮。
toggle_btn.onRelease = function(){
if(Stage.displayState == "fullScreen"){
Stage.displayState = "normal";
}
else{
Stage.displayState = "fullScreen"
}
}
If you want to detect that fullscreen mode has been entered or exited, you can use a new event listener function, onFullScreen:
如果你想要获取全屏模式是否被激活或者退出,你可以使用一个新的事件监听程序,onFullScreen:
EventListener = new Object;
EventListener.onFullScreen = function( bFull:Boolean ){
// change to fullscreen mode has been detected
if(bFull){
v_mc.vtxt = "You are in Full Screen Mode";
}
else{
v_mc.vtxt = "Everything is back to normal";
}
}
Stage.addListener( EventListener );
最后还有一个需要注意的地方,另一个安全的限制需要在EMBED标签中添加一个型的属性“allowFullScreen”,你要设置他为true:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"
width="320" height="240" id="fullscreen_flash" align="middle">
<param name="movie" value="fullscreen_flash.swf" />
<param name="quality" value="high" />
<param name="allowFullScreen" value="true" />
<param name="bgcolor" value="#ffffff" />
<embed src="fullscreen_flash.swf" allowfullscreen="true" quality="high"
bgcolor="#ffffff" width="320" height="240" name="fullscreen_flash" align="middle"
type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
Update: UFO does support the new attribute in version 3.21. Be sure to use the set the lowercase variable allowfullscreen:"true". SWFObject also supports it via so.addParam("allowFullScreen", "true").







