zoukankan      html  css  js  c++  java
  • JavaScript

    其实这东西网上到处都是,但并不完整。
    正好我也遇到了这个问题,不仅仅是预览,还需要得到图片的属性。
    于是东凑西凑整理出一个完整的版本,并根据个人的理解加上了一点点说明。


    首先做一些准备工作,HTML方面主要是img和input标签的id:

    <form>
        <input type='file' id="imgFile"  />
        <div id="previewDiv">
            <img id="previewImg" src="#" alt="your image" />
        </div>
    </form>
    


    另外,要为imgFile的change事件设置function:

    $(function(){
        $('#imgFile').change(function(e){doPreview(this);})
    });
    


    先从IE开始,IE上还是比较容易的。
    对于file控件的value会老老实实地获取,
    而且创建Image对象时只需要指定src属性值就能成功。
    剩下的就是从Image对象中获得属性了。
    代码如下:

    function doPreview(){
        document.getElementById('imgFile').src = input.value;
    
        var img = new Image();
        img.src = input.value;
    
        alert(''img.width+'; height:'+img.height);
    }
    


    当然,我们也可以不用img元素:

    function doPreview(){
        var previewDiv = document.getElementById("previewDiv");
        previewDiv.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = input.value;
    
        var img = new Image();
        img.src = input.value;
        previewDiv.style.width = img.width;
        previewDiv.style.height = img.height;
    
        alert(''+img.width+'; height:'+img.height);
    }
    


    如果要使用上面的filter,还需要加上:

    <style type="text/css">
    #previewDiv {
        filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);
    }
    </style>
    


    但这种方式在chrome下是行不通的,因为input.value会输出这样的结果:


    也就是做了些安全处理,似乎修改浏览器设置就可以,但我们不希望每个人都修改设置。
    FileReader对象恰好可以解决这个问题,

    我的情况需要用到FileReader的readAsDataURL。
    readAsDataURL将blob读作一个URL,load事件触发后将结果保存在this.result。
    试着输出一下返回结果,大概是如下结果,长度几万到几十万不等:


    其实这个返回结果可以直接用作img.src的值。
    剩下的就没有什么难度了。
    完整代码如下:

    $(function(){
        $('#imgFile').change(function(e){doPreview(this);})
    });
    
    
    function doPreview(input) {
    
        if (input.files && input.files[0]) {
            var reader = new FileReader();
            var file = input.files[0];
            reader.readAsDataURL(file);
            reader.onload = function (e) {
                var img = new Image();
                img.src = this.result;
    
                img.onload = function(){
                    var w = this.width,
                    h = this.height,
                    t = file.type,                           
                    n = file.name,
                    s = ~~(file.size/1024) +'KB';
                    $('#previewDiv').append('<img src="' + this.src +'"> '+w+'x'+h+' '+s+' '+t+' '+n+'<br>');
                }
    
            };
    
        }else{
            var previewDiv = document.getElementById("previewDiv");
            previewDiv.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = input.value;
    
            //previewDiv.innerHTML = '<img src="'+input.value+'" />'
            //document.getElementById('previewImg').src = input.value;
    
            var img = new Image();
            img.src = input.value;
            previewDiv.style.width = img.width;
            previewDiv.style.height = img.height;
            alert(''+img.width+'; height:'+img.height);
    
        }
    
    }
  • 相关阅读:
    brew基本使用
    手写函数
    http状态码——401和403差异
    HTTP状态码
    本地库和远程库交互
    IDEA集成Git
    Git命令
    数据库递归查询组织树父节点
    ZooKeeper程序员指南
    zookeeper简介
  • 原文地址:https://www.cnblogs.com/kavlez/p/4071545.html
Copyright © 2011-2022 走看看