Javascript高级编程学习笔记(90)—— Canvas(7) 绘制图像

绘制图像

2D绘图上下文内置了对图像的支持

如果希望将一幅图绘制到画布上,可以使用 drawImage() 的方法

 

该方法有三种不同的参数数组合以对应不同的应用场景

  1. 将<img>绘制到画布的(x,y)点  context.drawImage(img, x, y)
  2. 以宽 width 高 height 将<img>绘制到(x, y)点   context.drawImage(img, x, y, width, height)
  3. 绘制目标图像的一部分到画布 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);
        }

 

posted @ 2019-03-18 08:11  巽秋  阅读(326)  评论(0编辑  收藏  举报