话不多少,直接上代码

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)
}
}
}
}
}

FileReader 与canvas结合使用显示图片的更多相关文章

  1. 使用canvas 的api 实现 图片的显示 及 压缩

    在移动端压缩图片并且上传主要用到filereader.canvas 以及 formdata 这三个h5的api.逻辑并不难.整个过程就是: (1)用户使用input file上传图片的时候,用file ...

  2. Android Canvas使用drawBitmap绘制图片

    1.基本的绘制图片方法 //Bitmap:图片对象,left:偏移左边的位置,top: 偏移顶部的位置 drawBitmap(Bitmap bitmap, float left, float top, ...

  3. android中Canvas使用drawBitmap绘制图片

    1.主要的绘制图片方法 //Bitmap:图片对象,left:偏移左边的位置,top: 偏移顶部的位置     drawBitmap(Bitmap bitmap, float left, float ...

  4. 用android代码显示图片的一部分源码

    ShowPoritionPictureActivity代码: [java] <span style="font-size:16px;"> package com.iwi ...

  5. 让DELPHI自带的richedit控件显示图片

    让DELPHI自带的richedit控件显示图片 unit RichEx; { 2005-03-04 LiChengbin Added: Insert bitmap or gif into RichE ...

  6. Android训练课程(Android Training) - 高效的显示图片

    高效的显示图片(Displaying BitmapsEfficiently) 了解如何使用通用的技术来处理和读取位图对象,让您的用户界面(UI)组件是可响应的,并避免超过你的应用程序内存限制的方式.如 ...

  7. [Android] 给图像加入相框、圆形圆角显示图片、图像合成知识

        前一篇文章讲述了Android触屏setOnTouchListener实现突破缩放.移动.绘制和加入水印,继续我的"随手拍"项目完毕给图片加入相框.圆形圆角显示图片和图像合 ...

  8. js使用canvas在前端压缩图片

    HTML代码: <input id="file" type="file"> JS代码: var eleFile = document.querySe ...

  9. 微信小程序利用canvas生成海报分享图片

    一 . 效果 这是借用女神照生成的分享的海报,图片来自网络. 新增了poster组件和更新图片自适应 二 . 准备 准备两张图片连接,最好是自己开发账号验证的https图片链接. 三 . 实现思路 其 ...

随机推荐

  1. QT分析之QApplication的初始化

    原文地址:http://blog.163.com/net_worm/blog/static/1277024192010097430321/ 在开始分析之前交代一下,一是分析的QT在Window平台实现 ...

  2. 高性能python

    参考来源:Python金融大数据分析第八章 提高性能有如下方法 1.Cython,用于合并python和c语言静态编译泛型 2.IPython.parallel,用于在本地或者集群上并行执行代码 3. ...

  3. [计算机网络-应用层] FTP协议

    文件传输协议:FTP 如下图所示:用户通过一个FTP用户代理与FTP交互.该用户首先提供远程主机的主机名,使本地主机的FTP客户机进程建立一个到远程主机FTP服务器进程的TCP连接.然后,该用户提供用 ...

  4. 【数据库】Sql Server 2008完全卸载方法(其他版本类似)

    本文介绍如何卸载 Microsoft SQL Server 2008的方法.当您按照本文中的步骤时,您还准备系统以便可以重新安装 SQL Server 2008版本 一.    SQL2008卸载. ...

  5. Qt编码设置

    1.Qt Creator -> 工具 -> 选项 -> 环境 - >概要 -> 语言    Qt Creator本身界面的语言选择,与cpp文件编码无关,与可执行文件显示 ...

  6. RT-thread内核之线程调度器

    一.前言 RT-Thread中提供的线程调度器是基于全抢占式优先级的调度,在系统中除了中断处理函数.调度器上锁部分的代码和禁止中断的代码是不可抢占的之外,系统的其他部分都是可以抢占的,包括线程调度器自 ...

  7. CSS-posiziton

    1. 想要实现,”返回顶部”永远位于页面的右下角.需要用到position函数.CSS:层叠样式表.用到了分层的功能. position:fixed;  永远固定在一个地方. <!DOCTYPE ...

  8. hadoop 将HDFS上多个小文件合并到SequenceFile里

    背景:hdfs上的文件最好和hdfs的块大小的N倍.如果文件太小,浪费namnode的元数据存储空间以及内存,如果文件分块不合理也会影响mapreduce中map的效率. 本例中将小文件的文件名作为k ...

  9. bzoj3110: [Zjoi2013]K大数查询 【树套树,标记永久化】

    //========================== 蒟蒻Macaulish:http://www.cnblogs.com/Macaulish/  转载要声明! //=============== ...

  10. BZOJ 1342: [Baltic2007]Sound静音问题 | 单调队列维护的好题

    题目: 给n个数字,一段合法区间[l,l+m-1]要求max-min<=c 输出所有合法区间的左端点,如果没有输出NONE 题解: 单调队列同时维护最大值和最小值 #include<cst ...