zoukankan      html  css  js  c++  java
  • 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);
            }
  • 相关阅读:
    古代军队的官的从大到小的排序
    [转]DAO、RDO、ADO、OLE DB 、ODBC and JDB
    JSP页面之间参数传递中文出现乱码
    重置VS2008插件环境
    PB7中调用VC6的DLL
    Visual Studio统计有效代码行数
    php.ini 中文版
    IDEA Plugin JB* Components
    [转]你还在为怎么查看字节码指令而担忧吗?
    战地2, 2142解决Win10运行闪退问题
  • 原文地址:https://www.cnblogs.com/lhyxq/p/10550089.html
Copyright © 2011-2022 走看看