File读取和FileReader()

//获取上传的文件/图片
function getFile(){
var files,len;
var reader = new FileReader();
var img_type;
addEvent(selectFile,'change',function(){
files = this.files;//selectFile为上传文件表单,this.files获取选择的文件
len = files.length;
if(len > 0){
img_type = files[0].type;
if(/image/.test(img_type)){
reader.readAsDataURL(files[0]);//读取文件并将文件以数据URL的形式保存在result中
var img = new Image();
reader.onload = function(){
img.src = reader.result;
context.drawImage(img,0,0,width,height);
}
}else{
console.log('选择的不是图片');
}
}else{ alert('未选择文件');
}
})
}

HTML canvas clip() 方法

从画布中剪切 200*120 像素的矩形区域。然后,绘制一个红色矩形。只有被剪切区域内的红色矩形部分是可见的:

实现代码如下:

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
// Clip a rectangular area
ctx.rect(50,20,200,120);
ctx.stroke();
ctx.clip();
// Draw red rectangle after clip()
ctx.fillStyle="red";
ctx.fillRect(0,0,150,100);
</script>

clip()这个函数在使用的时候出现问题:

    context.clearRect(0,0,width,height);
// context.restore();
context.drawImage(img,0,0,width,height);
// context.save();
context.beginPath();
context.fillStyle = 'rgba(0,0,0,0.3)';
context.fillRect(0,0,width,height);
context.fill();

context.beginPath();
context.rect(x_axis,y_axis,clip_width,clip_height);
context.lineWidth = 3;
context.strokeStyle = 'lightblue';
context.stroke();
context.clip();
context.closePath(); context.drawImage(img,0,0,width,height);

注释掉context.save()和context.restore();后,剪切出现错误,只能在第一次剪切后的区域内进行新的剪切:

第一次剪切:

扩大宽度:(没有效果)

减小宽度:(出现很不想看到的bug)

context.clearRect(0,0,width,height);
context.restore();
context.drawImage(img,0,0,width,height);
context.save();
context.beginPath();
context.fillStyle = 'rgba(0,0,0,0.3)';
context.fillRect(0,0,width,height);
context.fill();
context.beginPath();
context.rect(x_axis,y_axis,clip_width,clip_height);
context.lineWidth = 3;
context.strokeStyle = 'lightblue';
context.stroke();
context.clip();
context.closePath(); context.drawImage(img,0,0,width,height);

修改后效果正确:

JavaScript中上传文件为图片如何读取+JS中如何使用clip()剪切指定区域(UI组件之图片剪裁器)的更多相关文章

  1. .net上传文件,利用npoi读取文件信息到datatable里

    整理代码,.net上传文件,利用npoi读取文件到datatable里,使用了FileUpload控件,代码如下: protected void Button1_Click(object sender ...

  2. Javascript 上传文件到Azure存储

    对一些前端工程师来讲,使用javascript上传文件到Azure存储中可能是需要掌握的技能,希望这篇博客能给到帮助. 在开始前我们需要了解以下几点: 共享访问签名(Shared Access Sig ...

  3. 现在,以编程方式在 Electron 中上传文件,是非常简单的!

    必要的上下文 想尽快熟悉上下文语境的,可以点这里: https://github.com/electron/electron/issues/749 这段讨论,其实本来是讨论如何自动设置 input 标 ...

  4. ASP.Net中上传文件的几种方法

    在做Web项目时,上传文件是经常会碰到的需求.ASP.Net的WebForm开发模式中,封装了FileUpload控件,可以方便的进行文件上传操作.但有时,你可能不希望使用ASP.Net中的服务器控件 ...

  5. vue中上传文件之multipart/form-data

    首先在项目里用了拦截器的,由于拦截器会将传递的参数转成对象,所以你i提交的时候会发现multipart/form-data或转变成application/json 其次关于input的文件上传是需要一 ...

  6. vue中上传文件相同文件名没反应

    vue项目中会遇到上传文件的需求,jquery会有一些插件很方便,如果不使用插件网上的方法没有太容易的而且很多是原生JS或者基于jQuery操作dom结构的.那么在vue项目中如何实现呢,还有如何模拟 ...

  7. 【解决】AWS服务控制台中上传文件失败

    使用IE 11,在 AWS Services Console 中不管是 S3 还是 Elastic Beanstalk 的页面中上传页面都会失败,提示信息如下: A problem occurred ...

  8. 谈谈php中上传文件的处理

    这是一个表单的时代... 我们在浏览器中编辑自己的信息,会遇到上传头像:在文库中,我们会上传文档......到处存在“上传”这个词. php是最好的语言(其他语言的程序猿们不要打我...).php在处 ...

  9. element-ui中上传文件upload

    <el-upload class="upload-demo" name="targetFile" ref="upload" :with ...

随机推荐

  1. Qt样式表之一:Qt样式表和盒子模型介绍

    一.Qt样式表介绍 Qt样式表是一个可以自定义部件外观的十分强大的机制,可以用来美化部件.Qt样式表的概念.术语和语法都受到了HTML的层叠样式表(Cascading Style Sheets, CS ...

  2. Brush (IV) LightOJ - 1018

    题意:平面上有一些点,每刷一次可以把同一条直线上的点都刷光,问最少几次把所有点刷光. 方法: 显然是一个状态压缩dp.ans[S]表示把S集合中点刷掉的最少次数.最开始想到的方法是如果S中只有一个或两 ...

  3. 用 Fleck 实现 websocket 通信

    <html lang="en"> <head> <meta charset="utf-8"> <title>rf ...

  4. 132 Palindrome Partitioning II 分割回文串 II

    给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串.返回 s 符合要求的的最少分割次数.例如,给出 s = "aab",返回 1 因为进行一次分割可以将字符串 s 分 ...

  5. G. 24 观察 + 树状数组

    http://codeforces.com/gym/101257/problem/G 首先要看到题目,题目是本来严格大于score[i] > score[j].然后score[i] < s ...

  6. iOS 项目代码组织

    参考了很多系列,发现老外们都比较喜欢 group by type,这两个还不错: http://akosma.com/2009/07/28/code-organization-in-xcode-pro ...

  7. java学习第二章

  8. 解决vue跨域问题

    package com.qmtt.config; import java.io.IOException; import javax.servlet.Filter; import javax.servl ...

  9. Tcl介绍和基础语法

    Tcl的背景 Tcl(读作tickle)诞生于80年代的加州大学伯克利分校,作为一种简单高效可移植性好的脚本语言,目前已经广泛应用在几乎所有的EDA工具中.Tcl 的最大特点就是其语法格式极其简单,采 ...

  10. makefile vpath变量

    在讲vpath之前,我们首先了解以下makefile文件. 在类Unix系统中,当我们使用源码编译某个软件的时候,我们会使用confiure,make,make install这三个命令,其中cofi ...