绘制图像
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); }