话不多少,直接上代码

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. Swift-(OC中的enumerateObjectsUsingBlock跟Swift的enumerate区别)

    OC中使用: NSArray * lists = [NSArray array]; [lists enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUI ...

  2. Swift中避免在多个文件中重复import相同的第三方包

    swift中由于有命名空间的存在,在同一个target创建的文件,都可以不引用直接就可以拿来使用,但是不同target之间必须要import 之后才能使用,在不同的文件中使用都要重复的import这个 ...

  3. 软工网络15个人作业4-alpha阶段个人总结(201521123059 叶文柠)

    一.个人总结 (1) 类别 具体技能和面试问题 现在回答 毕业找工作时 语言 最拿手的计算机语言之一,代码量多少? 感觉自己没有最拿手的语言,而且拿手的在计算机网络这方面的,所以在软件变成这方面的代码 ...

  4. go的IO函数,整理下最基本的IO处理函数,工欲善其事必先利其器

    bufio.NewScanner()函数是一行一行地读,但是对/proc/函数,这里不是个好方法,最好是把所有的数据一次读完,然后再去读,有没有这样读的接口呢?把所有数据都读入到内存中然后再通过通过搜 ...

  5. [洛谷P4111][HEOI2015]小Z的房间

    题目大意:有一个$n\times m$的房间,一些位置是房间,另一些位置是柱子,相邻两个房间之间有墙,问有多少种方案可以打通一些墙把所有房间连成一棵树,柱子不可以打通 题解:矩阵树定理,把房间当点,墙 ...

  6. BZOJ1041 [HAOI2008]圆上的整点 【数学】

    1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4631  Solved: 2087 [Submit][S ...

  7. float,absolute脱离文档流的总结

    dom元素脱离文档流,有如下几种方式: 1. float 脱离文档流,其他dom元素无视他,在其下方布局,但是其未脱离文本流,其他元素的文本会认为他存在,环绕他布局.父元素会无视他,因此无法获取其高度 ...

  8. 删边(cip)

    删边(cip) 给出一个没有重边和自环的无向图,现在要求删除其中两条边,使得图仍然保持连通. 你的任务是计算有多少组不合法的选边方案.注意方案是无序二元组. Sol 神题,无从下手啊. 考虑点dfs建 ...

  9. 【状压DP】【P2831】【NOIP2016D2T3】愤怒的小鸟

    传送门 Description Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 $(0,0)$ 处,每次 Kiana 可以用它向第一象限发射一 ...

  10. Educational Codeforces Round 6 B

    B. Grandfather Dovlet’s calculator time limit per test 1 second memory limit per test 256 megabytes ...