自动加载图片类

算是接着第一篇内容的衍生吧

上次说了简单的根据字节流进行判断类型的,这次贴出工作中用到的一个类

由于工作的需求是需要分开SVG与常规图片的分别,所以这里就简单判断了非常规图片类型的都是SVG

其中的ImageType是一个外部静态类,自行添加就好

而SVG是直接拿了 https://github.com/chndyyang/AS3SVGRenderer 的代码进行编译的

package
{
    import com.lorentz.SVG.display.SVGDocument;
    import com.lorentz.SVG.events.SVGEvent;
    import com.lorentz.processing.ProcessExecutor;

    import flash.display.DisplayObject;
    import flash.display.Loader;
    import flash.display.LoaderInfo;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.IOErrorEvent;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;
    import flash.utils.ByteArray;

    public class LoadImage extends Sprite
    {
        private var _url:String;
        private var _loader:URLLoader;
        private var _byLoader:Loader;
        private var _isNeedAll:Boolean;

        private var _needW:uint;
        private var _needH:uint;

        public var data:Object;

        public function LoadImage(needWidth:uint = 0, needHeight:uint = 0, url:String = ‘‘, isNeedAllResize:Boolean = false)
        {
            super();

            if(url != ‘‘)        _url = url;
            if(needWidth != 0)    _needW = needWidth;
            if(needHeight != 0)    _needH = needHeight;

            _isNeedAll = isNeedAllResize;

            _loader = new URLLoader();
            _loader.dataFormat = URLLoaderDataFormat.BINARY;
        }

        public function load(url:String=‘‘):void
        {
            if(url != ‘‘)        _url = url;

            if(_url == ‘‘)
            {
                trace("load image error url is null");
                return;
            }

            _loader.addEventListener(Event.COMPLETE, loadCompleteHandler);
            _loader.addEventListener(IOErrorEvent.IO_ERROR, loadErrorHandler);

            try
            {
                _loader.load(new URLRequest(_url));
            }
            catch(error:Error)
            {
                trace("load url error");
            }
        }

        private function loadCompleteHandler(event:Event):void
        {
            if(_loader == null) return;
            var ba:ByteArray = _loader.data as ByteArray;
            if(ba == null)    return;
            var type:String = getFileType(ba);

            _byLoader = new Loader();
            switch(type)
            {
                case ImageType.BMP:
                case ImageType.GIF:
                case ImageType.PNG:
                case ImageType.JPG:
                {
                    _byLoader.loadBytes(ba);
                    _byLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, byLoadComHandler);
                    break;
                }

                case ImageType.SVG:
                {
                    ProcessExecutor.instance.initialize(stage);

                    var svg:SVGDocument = new SVGDocument();
                    svg.parse(ba.readUTFBytes(ba.length));
                    svg.addEventListener(SVGEvent.RENDERED,
                        function onRendered(event:SVGEvent):void{
                            resizeDS(event.target as DisplayObject);
                        });
                    addChild(svg);
                    break;
                }

                default:
                {
                    break;
                }
            }

        }

        private function byLoadComHandler(event:Event):void
        {
            var info:LoaderInfo = event.target as LoaderInfo;
            resizeDS(info.content);
            addChild(info.content);

            _loader.removeEventListener(Event.COMPLETE, loadCompleteHandler);
            _loader.removeEventListener(IOErrorEvent.IO_ERROR, loadErrorHandler);
            _byLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, byLoadComHandler);
        }

        private function getFileType(fileData : ByteArray) : String {
            var b0 : int = fileData.readUnsignedByte();
            var b1 : int = fileData.readUnsignedByte();
            fileData.position = 0;

            if(b0 == 66 && b1 == 77) {
                return ImageType.BMP;
            }else if(b0 == 255 && b1 == 216) {
                return ImageType.JPG;
            }else if(b0 == 137 && b1 == 80) {
                return ImageType.PNG;
            }else if(b0 == 71 && b1 == 73) {
                return ImageType.GIF;
            }else if(b0 == 60 && b1 == 63){
                return ImageType.SVG;
            }

            return ImageType.UNKNOW;
        }

        private function loadErrorHandler(event:IOErrorEvent):void
        {
            trace("load image error");
        }

        private function resizeDS(ds:DisplayObject):void
        {
            var temp:uint;
            if(_needH != 0){
                temp = ds.height;
                ds.height = _needH;
                if(!_isNeedAll){
                    ds.width = Math.round(ds.height / temp * ds.width);
                }else{
                    ds.width = _needW;
                }
            }else if(_needW != 0){
                temp = ds.width;
                ds.width = _needW;
                if(!_isNeedAll){
                    ds.height = Math.round(ds.width / temp * ds.height);
                }else{
                    ds.height = _needH;
                }

            }
        }
    }
}
时间: 2024-10-14 00:58:15

自动加载图片类的相关文章

用GCD的方式,加载网络图片(主线程加载图片+类扩展方式)

用GCD的方式,加载网络图片(主线程加载图片+类扩展方式) 用两种方法来实现网络加载图片 方法1:实现的效果:先加载背景色灰色,两秒后加载图片 - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor=[UIColor grayColor]; //刷新UI(在主线程中刷新UI!!!) --- 一般方法 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PR

如何在tomcat启动时自动加载一个类

有时候在开发web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以采用在WEB-INF/web.xml中添加一个监听程序(ServletContextListener配置项),步骤如下:1) 增加一个监听程序 MyServletContextListener.java, 实现javax.servlet.ServletContextListener接口 packag

tomcat启动时自动加载一个类 MyServletContextListener

目的: 我们知道在tomcat启动后,需要页面请求进行驱动来执行操作接而响应.我们希望在tomcat启动的时候能够自动运行一个后台线程,以处理我们需要的一些操作.因此需要tomcat启动时就自动加载一个类,或运行一个类的方法. 可以采用ServletContextListener. 方法: (1)编写一个监听类,实现javax.servlet.ServletContextListener接口. 1 import javax.servlet.ServletContextEvent; 2 impor

JDBC4.0自动加载驱动器类

1 JDBC4.0自动加载驱动器类 2 从JDK1.6开始,Oracle就将修改了添加了新的加载JDBC驱动的方式.即JDBC4.0.在启动项目或是服务时,会判断当前classspath中的所的jar包,并检查META-INF目录下,是否包含services文件夹,如果包含,就会将里面的配置加载成相应的服务. 3 如Oracle11g的ojdbc6.jar包: 4 5 META-INF/services/jdbc.sql.Driver文件内容只有一行,即实现java.sql.Driver的类:

LruCache缓存处理及异步加载图片类的封装

Android中的缓存处理及异步加载图片类的封装 一.缓存介绍: (一).Android中缓存的必要性: 智能手机的缓存管理应用非常的普遍和需要,是提高用户体验的有效手段之一. 1.没有缓存的弊端: 流量开销:对于客户端——服务器端应用,从远程获取图片算是经常要用的一个功能,而图片资源往往会消耗比较大的流量. 加载速度:如果应用中图片加载速度很慢的话,那么用户体验会非常糟糕. 那么如何处理好图片资源的获取和管理呢?异步下载+本地缓存 2.缓存带来的好处: 1. 服务器的压力大大减小: 2. 客户

类的自动加载、类属性类方法的调用

类的自动加载: 方法一:spl_autoload_register(function($className){ require $className.".php"; }); $imooc = new Imooc(); 方法二: 类方法和类属性的调用: 原文地址:https://www.cnblogs.com/weixiaofantasy/p/9830227.html

IDEA 配置Jrebet 自动加载Java类,

官方文档地址: http://manuals.zeroturnaround.com/jrebel/ide/intellij.html#installation 原文地址:https://www.cnblogs.com/eason-d/p/9157168.html

php 类的自动加载

在编写面向对象(OOP) 程序时,很多开发者为每个类新建一个 PHP 文件. 这会带来一个烦恼:每个脚本的开头,都需要包含(include)一个长长的列表(每个类都有个文件). 在 PHP 5 中,已经不再需要这样了. spl_autoload_register() 函数可以注册任意数量的自动加载器,当使用尚未被定义的类(class)和接口(interface)时自动去加载.通过注册自动加载器,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类. Tip 尽管 __autoload()

用js实现图片自动加载的瀑布流效果

向下滑动网页的时候能够自动加载图片并显示. 盛放图片的盒子模型如下: <div class="box"> <div class="box_img"> <img src="Img/8.jpg"> </div> </div> 设置img-width为150px,然后box_img添加内边距和阴影效果,box的外边距为0,添加内边距.盒子的宽度是由img-width和边距撑开的.也就是说盒子之