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. 微信小程序资料收集(一)

    1.微信小程序用户授权 https://blog.csdn.net/qq_34827048/article/details/77990510 https://blog.csdn.net/qq_3361 ...

  2. [CQOI2014]通配符匹配

    Description 几乎所有操作系统的命令行界面(CLI)中都支持文件名的通配符匹配以方便用户.最常见的通配符有两个,一个是星号(""'),可以匹配0个及以上的任意字符:另一个 ...

  3. Codeforces Round #322 (Div. 2)

    水 A - Vasya the Hipster /************************************************ * Author :Running_Time * C ...

  4. 将picpick汉化及矩形截屏

  5. [转]深入浅出WPF(7)——数据的绿色通道,Binding

    本文转自:http://liutiemeng.blog.51cto.com/120361/95273 小序: 怎么直接从2蹦到7啦?!啊哦,实在是不好意思,最近实在是太忙了,忙的原因也非常简单——自己 ...

  6. hihocoder offer收割编程练习赛8 C 数组分拆

    思路:(引自bfsoyc的回答:http://hihocoder.com/discuss/question/4160) 动态规划.状态dp[i]表示 前i个数的合法的方案数,转移是 dp[i] = s ...

  7. Hibernate懒加载深入分析

    Hibernate懒加载深入分析 懒加载可以提高性能吗?  不可以简单的说"能",因为Hibernate的关系映射拖累了SQL的性能,所以想出懒加载来弥补.只是弥补而以,不会超越. ...

  8. 华为S3700交换机DHCP 配置

    1.设置交换机名称 system-view [Huawei]sysname dhcp01 [dhcp01] 2.配置管理IP [dhcp01]interface Vlanif 1 [dhcp01-Vl ...

  9. 【整理】用JSON-server模拟REST API

    用JSON-server模拟REST API https://www.cnblogs.com/ys-wuhan/p/6387791.html

  10. DLL动态库多次加载问题

    原因涉及DLL加载和运行机制,主要有两点:1)DLL动态链接库无法独立运行,必须由一个应用程序进程加载到进程空间后才能使用.加载DLL的进程称为宿主进程.被加载的DLL属于宿主进程,不属于宿主进程内某 ...