JavaScript中上传文件为图片如何读取+JS中如何使用clip()剪切指定区域(UI组件之图片剪裁器)
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组件之图片剪裁器)的更多相关文章
- .net上传文件,利用npoi读取文件信息到datatable里
整理代码,.net上传文件,利用npoi读取文件到datatable里,使用了FileUpload控件,代码如下: protected void Button1_Click(object sender ...
- Javascript 上传文件到Azure存储
对一些前端工程师来讲,使用javascript上传文件到Azure存储中可能是需要掌握的技能,希望这篇博客能给到帮助. 在开始前我们需要了解以下几点: 共享访问签名(Shared Access Sig ...
- 现在,以编程方式在 Electron 中上传文件,是非常简单的!
必要的上下文 想尽快熟悉上下文语境的,可以点这里: https://github.com/electron/electron/issues/749 这段讨论,其实本来是讨论如何自动设置 input 标 ...
- ASP.Net中上传文件的几种方法
在做Web项目时,上传文件是经常会碰到的需求.ASP.Net的WebForm开发模式中,封装了FileUpload控件,可以方便的进行文件上传操作.但有时,你可能不希望使用ASP.Net中的服务器控件 ...
- vue中上传文件之multipart/form-data
首先在项目里用了拦截器的,由于拦截器会将传递的参数转成对象,所以你i提交的时候会发现multipart/form-data或转变成application/json 其次关于input的文件上传是需要一 ...
- vue中上传文件相同文件名没反应
vue项目中会遇到上传文件的需求,jquery会有一些插件很方便,如果不使用插件网上的方法没有太容易的而且很多是原生JS或者基于jQuery操作dom结构的.那么在vue项目中如何实现呢,还有如何模拟 ...
- 【解决】AWS服务控制台中上传文件失败
使用IE 11,在 AWS Services Console 中不管是 S3 还是 Elastic Beanstalk 的页面中上传页面都会失败,提示信息如下: A problem occurred ...
- 谈谈php中上传文件的处理
这是一个表单的时代... 我们在浏览器中编辑自己的信息,会遇到上传头像:在文库中,我们会上传文档......到处存在“上传”这个词. php是最好的语言(其他语言的程序猿们不要打我...).php在处 ...
- element-ui中上传文件upload
<el-upload class="upload-demo" name="targetFile" ref="upload" :with ...
随机推荐
- 线段树(区间合并) HDOJ 3308 LCIS
题目传送门 题意:线段树操作:1. 单点更新 2. 求区间的LCIS(longest consecutive increasing subsequence) 分析:注意是连续的子序列,就是简单的区间合 ...
- SQL 语句学习
Sql语句学习 一. select playerId, count(playerId) as num from OperateLog_$i where playerId > 0 and roo ...
- 17984 FFF团的怒火
17984 FFF团的怒火 该题有题解 时间限制:1000MS 内存限制:65535K提交次数:55 通过次数:3 收入:3 题型: 编程题 语言: G++;GCC;VC;JAVA Descri ...
- 动手实现 Redux(四):共享结构的对象提高性能
接下来两节某些地方可能会稍微有一点点抽象,但是我会尽可能用简单的方式进行讲解.如果你觉得理解起来有点困难,可以把这几节多读多理解几遍,其实我们一路走来都是符合“逻辑”的,都是发现问题.思考问题.优化代 ...
- hihocoder1736 最大的K-偏差排列
思路: 容易写错的贪心题. 实现: #include <bits/stdc++.h> using namespace std; int main() { int n, k; while ( ...
- CF750C New Year and Rating
题意: 在cf系统中,给定一个人每次比赛所属的div及比赛之后的分数变化.计算经过这些比赛之后此人的rating最高可能是多少. 思路: 模拟. 实现: #include <cstdio> ...
- asp.net 中文部分显示问号
很神奇的事情,今天部署了一个网站,页面从数据读取新闻后,有些新闻标题全部显示问题号,有几个新闻能正确显示汉字,然后查看新闻页面又能正常显示汉字. 解决办法: 在异常的页面上加上 < %@ COD ...
- laravel学习笔记(一)
laravel 简述 优点:优雅.简洁.工程化(项目架构,协同开发) 版本:2011 June 1.0 ,LTS(long time) ,laravel 5.4 功能:队列.搜索.数据库搜索.定时脚本 ...
- SAP成都研究院安德鲁:自己动手开发一个Chrome Extension
各位好,我叫何金鑫(He Andrew), 团队同事亲切地称呼在下为安德鲁.如果你在附近找到wifi热点名为 「安德鲁森面包房5g」,可能是我就在附近,我们可以去喝杯咖啡,聊聊最近有趣的东西. 鄙人现 ...
- 使用正则进行HTML页面属性的替换
使用正则表达式拼接富文本框 package com.goboosoft.common.utils; import org.apache.commons.lang3.StringUtils; impor ...