打印

[AS3] 发布AS3类:ImageParser(下载完成前获取图片尺寸)

发布一个前一阵写的一个as3类。目前支持的格式有jpg,gif,png。有需要的可以用用,如果有什么bug也请告诉我。
名称:ImageParser
作者:Flashlizi(www.flashrek.com)
用途:在图片(jpg,gif,png格式)下载完成前获取图片尺寸。
说明:在Loader类中我们可以通过contentLoaderInfo来获取下载对象的各种信息,但是在下载过程中,我们并不能获取下载对象的width和height,只有等完成后才能获取。此类可以让你只下载很少数据量(1%或者更少)的时候就能获取图片的width和height,让你提前为图片准备合适尺寸的容器或者进行大小控制等操作。
附件内容:包含3个文件
ImageParser.as 本类,里面有注释
ImageLoader.as 改造的Loader类,使之在下载同时获取图片的width和height。
ImageLoader.fla 演示例子

直接使用示例:
复制内容到剪贴板
代码:
import com.flashrek.utils.ImageParser;
//支持的图片格式为jpg/gif/png
var url:String="http://bbs.blueidea.com/images/blue/logo.gif";
var uq:URLRequest=new URLRequest(url);
var _IP:ImageParser=new ImageParser();
_IP.parse(uq);
_IP.addEventListener(ImageParser.PARSE_COMPLETE,sizeComplete);
_IP.addEventListener(ImageParser.PARSE_FAILED,sizeFailed);
function sizeComplete(evt:Event) {
    trace("contentDimensions:"+_IP.contentWidth+"x"+_IP.contentHeight);
}
function sizeFailed(evt:Event) {
    trace("contentDimensions has no parsed");
}
ImageParser.as代码:

 提示:您可以先修改部分代码再运行
[ 本帖最后由 HBrO 于 2009-3-27 13:18 编辑 ]
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!
本帖最近评分记录
对付大图,很有用
不错,收藏鸟。哈哈

TOP

认证您的手机,获得手机认证图标, 更多手机认证的好处
protected static  const JPGHexTag:Array=[[0xFF,0xC0,0x00,0x11,0x08]];
              protected static  const PNGHexTag:Array=[[0x49,0x48,0x44,0x52]];
              protected static  const GIFHexTag:Array=[[0x21,0xF9,0x04],[0x00,0x2C]];;
//这段怎么来的,可以解释下吗,不大懂....
还有readUnsignedByte()...readUnsignedShort() 获取的值都是些什么概念
JPGHexTag是jpg图片的SOF0块标记;GIFHexTag是gif图片的图形控制块标记(Graphic Control Label)标记和图像描述(Image Descriptor);PNGHexTag是png的Image header(IHDR)块标记。
简单说这些都是为了找到图片的width和height的。

至于readUnsignedByte()...readUnsignedShort() 等是读取二进制数据的方法。具体去看看URLStream类或者ByteArray类就很清楚了。

TOP

话说那你这东西来扫描巨大图片然后不需要加载就可以根据获得的尺寸来计算
然后读取需要的2进制数据生成缩略图啊

好东西,我正在写这个组建正愁找不到办法呢。LZ帮我解决了。3Q
前略,这是一个密码:fg684p

TOP

非常感谢,不知道其中方法在as2里适用否?
http://www.liuhuan.com

TOP

moonsun想法不错,不过也只有jpg图片里包含缩略图部分,而且也不是所有jpg图片都有缩略图。
这个只能在as3使用,as2不能。

TOP

好东西啊

TOP

AS3霍夫曼解碼。
不過有一個問題。網速特別慢的時候。根據第一個進度事件產生的位置。我認為不一定一定可以包含完整的圖片頭數據。
紫色的風.net
迷一样打不开的地址

TOP

實際上。這個原理是因為寬度和高度都包含在頭部中。tag部分都是像素信息。所以可以在開始讀取。
但問題是霍夫曼編碼不定長,雖然頭很短。一個進度事件就能包含。但是極端情況,
比如取不到所需值或者異常則等待下一個進度事件?
紫色的風.net
迷一样打不开的地址

TOP