zoukankan      html  css  js  c++  java
  • html5 Canvas处理图像 实例讲解

    最近在学习canvas,canvas有很强大的图像处理功能,下面写一个我的学习总结:

    canvas常用功能:

    1. 绘制矩形、圆形、曲线、组合图形

    2. 绘制文本

    3.绘制渐变、变形的图形

    4. 图片处理功能:绘制图片到画布、裁剪图片、

    步骤:

    1.在html中新增canvas元素,建议在canvas元素中设置width和height

    2.编写js代码(需要在onload时调用绘制图形的函数):

    2.1 获取画布

    2.2 获取画笔:图像上下文、封装了图像绘制功能的对象,目前只支持2d

    2.3 设置图像样式:填充样式(fillStyle)和边框样式(strokeStyle)

    2.4 指定线宽:lineWidth

    2.5 图像变形:平移translate(x,y)、缩放scale(x,y)、旋转rotate(rangle)

    2.6 填充(fill)与绘制边框(stroke)

    示例:

    1.绘制矩形

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>Examples</title>
    <meta name="description" content="">
    <meta name="keywords" content="">
    <link href="" rel="stylesheet">
    </head>
    <body>
        <canvas id="c1" width="800" height="600"></canvas>
        <script>
            pageInit("c1");
    
            function pageInit(id){
                var canvas=document.getElementById(id);
                if(canvas==null) 
                        return false;
                var context = canvas.getContext('2d');
                with(context){
                        //画布背景
                        fillStyle="#EEEEFF";
                        fillRect(0,0,200,200);
                        //矩形
                        fillStyle="yellow";
                        fillRect(0,0,100,100);
                        //边框
                        strokeStyle="red";
                        lineWidth=1;
                        strokeRect(0,0,100,100);
                }
            }
        </script>
    </body>
    </html>
    View Code

    运行图像:

    2.操作图像

    火狐浏览器第一次打开时可能报错:NS_ERROR_NOT_AVAILABLE,运行后刷新浏览器即可

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>Canvas_Image</title>
    <meta name="description" content="">
    <meta name="keywords" content="">
    <link href="" rel="stylesheet">
    <style>
        #content{
            width: 900px;
            height: 800px;
            margin: auto;
            text-align: center;
        }
        #c1{
            border:1px blue solid;
        }
    </style>
    </head>
    <body>
        <div id="content">
            <h1>Canvas 处理图像</h1>
            <canvas id="c1" width="800" height="600"></canvas>
            <div>
            <label for="sel1">图像平铺方式</label>
            <select id="sel1">
                <option value="no-repeat" selected>no-repeat</option>
                <option value="repeat-x">repeat-x</option>
                <option value="repeat-y">repeat-y</option>
                <option value="repeat">repeat</option>
            </select>
            <button id="btnScale">局部放大</button>
            <button id="btnImgData">图像反显</button>
        </div>
        </div>
        <script>
            //定义全局变量
            var GLOBAL={};
            GLOBAL.id="c1";
            GLOBAL.img = new Image();
            GLOBAL.img.src="images/1.jpg";
            //加载入口函数,相当于jQuery中的$(document).ready
            pageInit();
    
            function pageInit(){
                //获取画布
                canvas=document.getElementById(GLOBAL.id);
                //获取画笔
                context = canvas.getContext('2d');
                CopyAndRepeat(context,GLOBAL.img);
            }
            //图像平铺
            function CopyAndRepeat(context,img){
                var cType = document.getElementById("sel1");
                //alert(cType.value);
                clearCanvas(context);
                with(context){
                    var ptrn=createPattern(img,cType.value);
                    fillStyle=ptrn;
                    fillRect(0,0,800,600);
                }
            }
            //复制、局部放大
            function CopyAndScale(){
                id=GLOBAL.id;
                canvas=document.getElementById(id);
                context = canvas.getContext('2d');
                clearCanvas(context);
                with(context){
                    drawImage(GLOBAL.img,0,0);
                    drawImage(GLOBAL.img,20,20,100,100,165,0,156,165);
                }
            }
            //图像反显
            function ReverseImg(){
                id=GLOBAL.id;
                canvas=document.getElementById(id);
                context = canvas.getContext('2d');
                clearCanvas(context);
                with(context){
                    drawImage(GLOBAL.img,0,0);
                    var imgData = getImageData(0,0,GLOBAL.img.width,GLOBAL.img.height);
                    console.dir(imgData);
                    for(var i=0, n=imgData.data.length; i<n; i+=4){
                        imgData.data[i+0]=255-imgData.data[i+0];    //red
                        imgData.data[i+1]=255-imgData.data[i+1];    //green
                        imgData.data[i+2]=255-imgData.data[i+2];    //blue
                    }
                    putImageData(imgData,0,0);
                }
            }
            //清除画布
            function clearCanvas(context){
                with(context){
                    //清除画布
                    clearRect(10,0,800,600);
                    //设置背景色
                    fillStyle="#EEFFFF";
                    fillRect(0,0,800,600);
                }
            }
            document.getElementById("btnScale").onclick=function(){
                CopyAndScale();
            }
            document.getElementById("btnImgData").onclick=function(){
                ReverseImg();
            }
            document.getElementById("sel1").onchange=function(){
                canvas=document.getElementById(GLOBAL.id);
                context = canvas.getContext('2d');
                CopyAndRepeat(context,GLOBAL.img);
            }
        </script>
    </body>
    </html>
    View Code

    运行图像:

  • 相关阅读:
    对于高并发短连接造成Cannot assign requested address解决方法
    virtualbox迁移已建虚机存储磁盘方法
    httpd:RSA certificate configured for SERVER does NOT include an ID which matches the server name
    解决服务不断重启挂掉问题
    tbb静态库编译
    su和su
    ubuntu18.04 mariadb start失败
    如何修复“sshd error: could not load host key”
    [LeetCode]Gas Station
    Java多态的一些陷阱
  • 原文地址:https://www.cnblogs.com/WebMobile/p/4001541.html
Copyright © 2011-2022 走看看