Javascript高级编程学习笔记(90)—— Canvas(7) 绘制图像
绘制图像
2D绘图上下文内置了对图像的支持
如果希望将一幅图绘制到画布上,可以使用 drawImage() 的方法
该方法有三种不同的参数数组合以对应不同的应用场景
- 将<img>绘制到画布的(x,y)点 context.drawImage(img, x, y)
- 以宽 width 高 height 将<img>绘制到(x, y)点 context.drawImage(img, x, y, width, height)
- 绘制目标图像的一部分到画布 context.drawImage(img, 源图像的x, 源图像的y, 源图像的宽, 源图像的高, 目标图像的x, 目标图像的y, 目标图像的宽, 目标图像的高)
PS:上述方法对img的操作不会修改变换矩阵
当我们需要对图像进行处理的时候通常都会使用 canvas
以下方的代码为例:
function testVideo() {
let URL = window.URL || window.webkitURL; // 获取到window.URL对象
navigator.getUserMedia({
video: true
}, function (stream) {
video.src = URL.createObjectURL(stream); // 将获取到的视频流对象转换为地址
video.play(); // 播放
//点击截图
snap.onclick = function () {
ctx.drawImage(video, -220, -280, width, height);
tempImg.push(canvas.toDataURL('image/jpg'));
id.push(String((new Date()).valueOf()));
};
$('.mask').eq(0).show(300);
setTimeout(collect,500);
play=true;
}, function (error) {
throw error;
//console.log(error.name || error);
});
}
上述代码是一个调用本地摄像头采集图像的部分代码示例
下方是剪裁图片,并预览的部分代码示例:
//图片转base64
function run(input_file,get_data){
/*input_file:文件按钮对象*/
/*get_data: 转换成功后执行的方法*/
if ( typeof(FileReader) === 'undefined' ){
alert("抱歉,你的浏览器不支持 FileReader,不能将图片转换为Base64,请使用现代浏览器操作!");
} else {
try{
/*图片转Base64 核心代码*/
let file = input_file.files[0];
//这里我们判断下类型如果不是图片就返回 去掉就可以上传任意文件
if(!/image\/\w+/.test(file.type)){
alert("请确保文件为图像类型");
return false;
}
let reader = new FileReader();
reader.onload = function(){
get_data(this.result);
}
reader.readAsDataURL(file);
}catch (e){
alert('图片转Base64出错!'+ e.toString())
}
}
}
let api,img = $("#userimg");
let opt = {
borderOpacity: 1,
onChange:function () {
let ratio = [];
ratio.push(img[0].naturalWidth/img.width());
ratio.push(img[0].naturalHeight/img.height());
drawpic(this.tellSelect(),ratio);
}
};//Jcrop参数
//预览图片
let canvas = $("canvas")[0].getContext("2d");
function drawpic(pra,ratio) {
canvas.drawImage(img[0],pra.x*ratio[0],pra.y*ratio[1],pra.w*ratio[0],pra.h*ratio[1],0,0,300,200);
}
Javascript高级编程学习笔记(90)—— Canvas(7) 绘制图像的更多相关文章
- Javascript高级编程学习笔记(93)—— Canvas(10) 模式及图像数据
模式 模式其实就是重复的图像,用来填充或描边图形 要创建一个新模式,可以调用 createPattern()并传入两个参数 一个HTML img元素 用于表示如何重复的字符串 "repeat ...
- Javascript高级编程学习笔记(87)—— Canvas(4)绘制路径
绘制路径 2D上下文支持许多在画布上绘制路径的方法 通过路径可以创造出复杂的形状和线条,要绘制路径首先必须调用beginPath()方法,表示开始绘制路径 然后再通过下列的方法绘制路径: arc(x, ...
- Javascript高级编程学习笔记(86)—— Canvas(3)绘制矩形
绘制矩形 矩形是唯一一种可以直接在2D上下文中绘制的形状. 与矩形有关的方法包括: fillRect() strokeRect() clearRect() 上述方法都接收四个参数: 绘制矩形的 X 坐 ...
- Javascript高级编程学习笔记(94)—— Canvas(11) 合成
合成 除了之前介绍的属性之外,还有两个属性会应用到整个2d上下文中; globalAlpha 用于指定所有绘制的透明度 globalComposition 用于表示后绘制的图形怎样与先绘制的图形进行结 ...
- Javascript高级编程学习笔记(89)—— Canvas(6) 变换
变换 通过上下文的变化,可以对图像进行处理后再将其绘制到画布上 当我们创建上下文时,会以默认值初始化变化矩阵,在默认的变换矩阵下所有处理都按描述直接绘制. 而当我们为上下文应用变换时,会导致使用不同的 ...
- Javascript高级编程学习笔记(88)—— Canvas(5)绘制文本
绘制文本 同样的,canvas也为绘制文本提供了相应的方法. 2D上下文提供的文本绘制方法主要有两个: fillText() strokeText() 这两个方法都接受四个参数 要绘制的文本字符串 绘 ...
- Javascript高级编程学习笔记(85)—— Canvas(2)2D上下文
2D上下文 使用2D上下文提供的方法可以绘制简单的2D图形,如矩形,弧线和路径; 2D上下文的坐标开始域<canvas>元素的左上角,原点坐标为(0,0) 后续所有操作的计算都基于原点,x ...
- Javascript高级编程学习笔记(84)—— Canvas(1)基本用法
Canvas绘图 Canvas自HTML5引入后,由于其炫酷的效果成为HTML5新增功能中最受欢迎的部分 Canvas元素通过在页面中设定一个区域,然后就可以使用JS在其中绘制图形 <canva ...
- Javascript高级编程学习笔记(91)—— Canvas(8) 阴影
阴影 2D上下文将会根据以下属性为形状或路径绘制阴影 shadowColor: 用于设置阴影颜色,默认为黑色 shadowOffsetX: 形状或路径X方向的阴影偏移量,默认为0 shadowOffs ...
随机推荐
- zigbee 信道
以zigbee nxp5169 信道是:11-26 15d0f1-170923 15 ----- 信道 d0f1--- 是zigbee 物理地址 170923---时间2017年9月 ...
- MVC设计模式的简单理解
MVC介绍 众所周知MVC不是设计模式,是一个比设计模式更大一点的模式,称作设计模式不合理,应该说MVC它是一种软件开发架构模式,它包含了很多的设计模式,最为密切是以下三种:Observer (观察者 ...
- java中枚举起别名
public enum Gender { MALE("男"),FELMALE("女"); private final String cValue; privat ...
- sql server使用sql语句上传Excel到数据库
USE pro GO SELECT * INTO temp_budget_price@201704170950 FROM OPENDATASOURCE('Microsoft.Jet.OLE ...
- python3中列表、元组、字典的增删改查说明详解
python基础中的列表.元组.字典属于python中内置的序列数据结构.其中序列可以进行的操作包括索引.截取(切片).加.乘.成员检查等. 1.列表 列表(list)是最常用的python数据类型之 ...
- 计蒜客 买书 dfs
题目: https://www.jisuanke.com/course/2291/182236 思路: 递归解决,从第一本书开始,每本书都有两种选择: //index是book里面每本书价格的下标, ...
- python-MYSQL(包括ORM)交互
1.首先,我们必须得连上我们的MYSQL数据库.个人遇到连不上MYSQL数据的问题主要有:数据库的权限问题.数据库表权限的问题 同时获取数据库中的数据等. //==================== ...
- linux视频录制,推流处理
1.linux视频合成(视频后缀要一致) ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -lavfi hstack=inputs=3 4.mp4 (input=3表示希望合并的视 ...
- Python爬虫开发与项目实战
Python爬虫开发与项目实战(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1MFexF6S4No_FtC5U2GCKqQ 提取码:gtz1 复制这段内容后打开百度 ...
- ZOJ4043 : Virtual Singers
将所有$A$和$B$混在一起排序,那么每个$B$要匹配一个$A$,从左往右依次考虑每个数: 如果是一个$B$: 如果左边没有多余的$A$,那么将其放入堆$q_C$中,表示这个$B$还未匹配. 否则选择 ...