URLStream,URLLoader和Loader
2009-01-06 22:06
302 查看
URLSteam读取文本文件可以支持多种编码
URLLoader如果遇到乱码,则可以转换(就像上篇说的利用标准的xml格式Excle可以解决乱码问题就是基于这里):
var ba:ByteArray = new ByteArray;
ba.writeBytes((event.target as URLLoader).data);
ba.position = 0;
//假如记载的是xml文档
var xml:XML = XML(ba.readMultiByte(ba.length, "GBK"));
loader用于加载外部的图片文件,SWF文件等。我之前在一个air里面用到它来上载图片,并且要生成一个缩略图,实现代码如下:
//import的相关
import mx.events.CloseEvent;
import flash.geom.Matrix;
import mx.graphics.codec.JPEGEncoder;
import mx.graphics.codec.PNGEncoder;
import mx.controls.Image;
import mx.controls.Alert;
import mx.utils.ArrayUtil;
import mx.collections.ArrayCollection;
import mx.formatters.NumberFormatter;
import mx.messaging.AbstractConsumer;
//压缩小图的相关信息信息
private var SmallPicSize:int = 80;
//保存相片的扩展名列表
private static const EXT_JPEG:String = "jpg";
private static const EXT_PNG:String = "png";
public function browseAndUpload():void
{
var FileToOpen:File = File.documentsDirectory;
var txtFilter:FileFilter = new FileFilter("jpg,png","*.jpg;*png;");
FileToOpen.browseForOpen("Open", [txtFilter]);
FileToOpen.addEventListener(Event.SELECT,FileToOpenSelected);
}
//当上载的相片被打开后,就进行上载操作
private function FileToOpenSelected(objEvent:Event):void
{
var OrgImgPath:String = File(objEvent.currentTarget).nativePath;
try
{
var orgFile:File = new File(OrgImgPath);
//获取一个随机的图片名称
var curPicName:String = "TestUploadPic."+orgFile.extension;
//假如我们把图片的大图片放到项目的/upload/big/文件夹下
var bigImgFile:File = new File(File.applicationDirectory.nativePath+"/upload/big/"+curPicName);
orgFile.copyTo(bigImgFile);
//获取原图的bitmap信息,然后重构一个小图放到temp/small/文件夹下面
var loader:Loader = new Loader();
//使用内联函数在事件中传递参数
var mySpecialObject:Object = {NewImgName:curPicName,NewImgExt:orgFile.extension};
//注意是loader.contentLoaderInfo
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,function (e:Event) : void {loadComplete(e,mySpecialObject);});
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,loadError);
//加载原图
var request:URLRequest = new URLRequest(orgFile.nativePath);
loader.load(request);
}
catch(er:Error)
{
Alert.show(er.message);
}
}
//在上载的过程中把原图也load进了内存,主要目的是用原图来生成一个小图,load这个动作完成后的处理方法
public function loadComplete(event:Event,objSpecial:Object):void
{
try
{
if(objSpecial != null && objSpecial.NewImgName.toString() != "")
{
var loader:Loader = Loader(event.target.loader);
var BigBitmapdata:BitmapData = Bitmap(loader.contentLoaderInfo.content).bitmapData;
var myscale:Number = 1.0;
if(BigBitmapdata.width > 120 || BigBitmapdata.height > 100)
{
if(BigBitmapdata.width > BigBitmapdata.height)
{
myscale = 120/BigBitmapdata.width;
}else
{
myscale = 100/BigBitmapdata.height;
}
}
//创建新转换矩阵
var m:Matrix = new Matrix();
m.scale(myscale,myscale);
var SmallBitmapdata:BitmapData = new BitmapData(BigBitmapdata.width*myscale,BigBitmapdata.height*myscale,BigBitmapdata.transparent,0xFFFFFFFF);
SmallBitmapdata.draw(BigBitmapdata,m);
//相片的Bytearray
var imgByteArray:ByteArray;
switch(objSpecial.NewImgExt.toString())
{
case EXT_JPEG:
var jpgenc:JPEGEncoder = new JPEGEncoder(80);
imgByteArray = jpgenc.encode(SmallBitmapdata);
break;
case EXT_PNG:
var pngenc:PNGEncoder = new PNGEncoder();
imgByteArray = pngenc.encode(SmallBitmapdata);
break;
}
//假如我们把图片的大图片放到项目的/upload/small/文件夹下
var smallFile:File = new File(File.applicationDirectory.nativePath+"/upload/small/"+objSpecial.NewImgName.toString());
var fs:FileStream = new FileStream();
try{
fs.open(smallFile,FileMode.WRITE);
fs.writeBytes(imgByteArray);
fs.close();
}catch(e:Error){
Alert.show(e.message);
}
//释放BitmapData所占用的内存(很重要)
BigBitmapdata.dispose();
SmallBitmapdata.dispose();
}
}
catch(err:Error)
{
Alert.show("生成小图片出错.");
}
}
//当load原图的时候出错的处理方法
public function loadError(event:IOErrorEvent):void
{
Alert.show("上载的图片源:"+Loader(event.target.loader).contentLoaderInfo.loaderURL.toString()+"不存在,无法生成小图");
}
URLLoader如果遇到乱码,则可以转换(就像上篇说的利用标准的xml格式Excle可以解决乱码问题就是基于这里):
var ba:ByteArray = new ByteArray;
ba.writeBytes((event.target as URLLoader).data);
ba.position = 0;
//假如记载的是xml文档
var xml:XML = XML(ba.readMultiByte(ba.length, "GBK"));
loader用于加载外部的图片文件,SWF文件等。我之前在一个air里面用到它来上载图片,并且要生成一个缩略图,实现代码如下:
//import的相关
import mx.events.CloseEvent;
import flash.geom.Matrix;
import mx.graphics.codec.JPEGEncoder;
import mx.graphics.codec.PNGEncoder;
import mx.controls.Image;
import mx.controls.Alert;
import mx.utils.ArrayUtil;
import mx.collections.ArrayCollection;
import mx.formatters.NumberFormatter;
import mx.messaging.AbstractConsumer;
//压缩小图的相关信息信息
private var SmallPicSize:int = 80;
//保存相片的扩展名列表
private static const EXT_JPEG:String = "jpg";
private static const EXT_PNG:String = "png";
public function browseAndUpload():void
{
var FileToOpen:File = File.documentsDirectory;
var txtFilter:FileFilter = new FileFilter("jpg,png","*.jpg;*png;");
FileToOpen.browseForOpen("Open", [txtFilter]);
FileToOpen.addEventListener(Event.SELECT,FileToOpenSelected);
}
//当上载的相片被打开后,就进行上载操作
private function FileToOpenSelected(objEvent:Event):void
{
var OrgImgPath:String = File(objEvent.currentTarget).nativePath;
try
{
var orgFile:File = new File(OrgImgPath);
//获取一个随机的图片名称
var curPicName:String = "TestUploadPic."+orgFile.extension;
//假如我们把图片的大图片放到项目的/upload/big/文件夹下
var bigImgFile:File = new File(File.applicationDirectory.nativePath+"/upload/big/"+curPicName);
orgFile.copyTo(bigImgFile);
//获取原图的bitmap信息,然后重构一个小图放到temp/small/文件夹下面
var loader:Loader = new Loader();
//使用内联函数在事件中传递参数
var mySpecialObject:Object = {NewImgName:curPicName,NewImgExt:orgFile.extension};
//注意是loader.contentLoaderInfo
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,function (e:Event) : void {loadComplete(e,mySpecialObject);});
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,loadError);
//加载原图
var request:URLRequest = new URLRequest(orgFile.nativePath);
loader.load(request);
}
catch(er:Error)
{
Alert.show(er.message);
}
}
//在上载的过程中把原图也load进了内存,主要目的是用原图来生成一个小图,load这个动作完成后的处理方法
public function loadComplete(event:Event,objSpecial:Object):void
{
try
{
if(objSpecial != null && objSpecial.NewImgName.toString() != "")
{
var loader:Loader = Loader(event.target.loader);
var BigBitmapdata:BitmapData = Bitmap(loader.contentLoaderInfo.content).bitmapData;
var myscale:Number = 1.0;
if(BigBitmapdata.width > 120 || BigBitmapdata.height > 100)
{
if(BigBitmapdata.width > BigBitmapdata.height)
{
myscale = 120/BigBitmapdata.width;
}else
{
myscale = 100/BigBitmapdata.height;
}
}
//创建新转换矩阵
var m:Matrix = new Matrix();
m.scale(myscale,myscale);
var SmallBitmapdata:BitmapData = new BitmapData(BigBitmapdata.width*myscale,BigBitmapdata.height*myscale,BigBitmapdata.transparent,0xFFFFFFFF);
SmallBitmapdata.draw(BigBitmapdata,m);
//相片的Bytearray
var imgByteArray:ByteArray;
switch(objSpecial.NewImgExt.toString())
{
case EXT_JPEG:
var jpgenc:JPEGEncoder = new JPEGEncoder(80);
imgByteArray = jpgenc.encode(SmallBitmapdata);
break;
case EXT_PNG:
var pngenc:PNGEncoder = new PNGEncoder();
imgByteArray = pngenc.encode(SmallBitmapdata);
break;
}
//假如我们把图片的大图片放到项目的/upload/small/文件夹下
var smallFile:File = new File(File.applicationDirectory.nativePath+"/upload/small/"+objSpecial.NewImgName.toString());
var fs:FileStream = new FileStream();
try{
fs.open(smallFile,FileMode.WRITE);
fs.writeBytes(imgByteArray);
fs.close();
}catch(e:Error){
Alert.show(e.message);
}
//释放BitmapData所占用的内存(很重要)
BigBitmapdata.dispose();
SmallBitmapdata.dispose();
}
}
catch(err:Error)
{
Alert.show("生成小图片出错.");
}
}
//当load原图的时候出错的处理方法
public function loadError(event:IOErrorEvent):void
{
Alert.show("上载的图片源:"+Loader(event.target.loader).contentLoaderInfo.loaderURL.toString()+"不存在,无法生成小图");
}
相关文章推荐
- Loader ,URLLoader ,URLStream的使用区别
- (转)Loader ,URLLoader ,URLStream的区别
- Loader ,URLLoader ,URLStream的使用区别(转)
- loader,URLLoader,URLStream三种动态加载资源的具体使用场合和区别 及今日心得体会
- Loader ,URLLoader ,URLStream的使用区别
- Loader ,URLLoader ,URLStream的使用区别
- Loader ,URLLoader ,URLStream的使用区别
- Loader ,URLLoader ,URLStream的使用区别
- AS3中URLStream, URLLoader, Loader和URLRequest区别
- AS3中 Loader,URLLoader和URLStream的区别
- Loader 和URLLoader的区别.
- flash as3 的loader与urlloader事件监听对象不同
- AS3 Loader与URLLoader的区别与比较
- Loader加载与URLLoader加载(跨域加载操作)安全沙箱冲突
- Loader,URLLoader 和 二进制数据的测试示例
- urlLoader 和Loader有什么区别?
- UILoader URLLoader Loader 类的区别
- AS3.0下Loader与URLLoader的比较
- Loader与URLLoader,SWFLoader
- as3中对于Loader变量和URLLoader加载方式的区别