FileReader 与canvas结合使用显示图片

话不多少,直接上代码

function fileChange() {
            var file = this.files[0];
            var imageType = /^image\//;
            //是否是图片
            if (!imageType.test(file.type)) {
                layAlert("请选择图片!");
                loadHide()
                return;
            }
            //判断是否已经上传
            var fileState = false;
            var fileImgs = document.querySelectorAll('.imgName');
            for (var i = 0; i < fileImgs.length; i++) {
                if (fileImgs[i].getAttribute('data-imgname') == file.name) {
                    fileState = true;
                }
            }
            if (fileState == true) {
                tishi('该图片上传过了')
                return;
            }
            fnSetImgRelaod(file)
        }
        function fnSetImgRelaod(file) {
            if (!window.FileReader) {
                layAlert("您的设备不支持图片预览功能,如需该功能请升级您的设备!");
                loadHide()
                return
            } else {
                var reader = new FileReader(file);// FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容
                reader.readAsDataURL(file);//开始读取指定的Blob对象或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件处理程序,则调用之.同时,result属性中将包含一个data:URL格式的字符串以表示所读取文件的内容.
                reader.onload = function (e) {
                    var fileImg = document.createElement('div');
                    $('#fileImg').siblings().show();
                    fileImg.className = 'fileImg prel';
                    document.querySelector('#fileImg').appendChild(fileImg);
                    var canvas = document.createElement("canvas");
                    canvas.className = 'canvas';
                    fileImg.appendChild(canvas);
                    var ctx = canvas.getContext("2d");
                    var image = new Image();
                    image.src = this.result;
                    image.onload = function () {
                        var cw = image.width;
                        var ch = image.height;
                        var w = image.width;
                        var h = image.height;
                        canvas.width = w;
                        canvas.height = h;
                        if (cw > 100 && cw >= ch) {
                            w = 100;
                            h = (100 * ch) / cw;
                            canvas.width = w;
                            canvas.height = h;
                        }
                        if (ch > 100 && ch >= cw) {
                            h = 100;
                            w = (100 * cw) / ch;
                            canvas.width = w;
                            canvas.height = h;

                        }
                        ctx.drawImage(image, 0, 0, w, h);

                        var imgBtn = document.createElement('sapn');
                        imgBtn.className = 'btn pabs';
                        imgBtn.innerText = '删除';
                        fileImg.appendChild(imgBtn);
                        var imgName = document.createElement('div');
                        imgName.className = 'imgName';
                        imgName.innerText = file.name;
                        imgName.setAttribute('data-imgname', file.name);
                        fileImg.appendChild(imgName);

                        imgBtn.onclick = function () {
                            $(this).parent().remove();
                        }
                        canvas.onclick = function () {
                            showImg(e.target.result)
                        }
                    }
                }
            }
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值