zoukankan      html  css  js  c++  java
  • HTML5标签canvas图像处理

    摘要:

       canvas可以读取图片后,使用drawImage方法在画布内进行重绘。本文介绍canvas的图像处理

    drawImage

      drawImage() 方法在画布上绘制图像、画布或视频。drawImage() 方法也能够绘制图像的某些部分,以及/或者增加或减少图像的尺寸。

    语法

      在画布上定位图像:
        context.drawImage(img,x,y);

      在画布上定位图像,并规定图像的宽度和高度:

        context.drawImage(img,x,y,width,height);

      剪切图像,并在画布上定位被剪切的部分:

        context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);

    参数

    img  规定要使用的图像、画布或视频。

    sx  可选。开始剪切的 x 坐标位置。

    sy  可选。开始剪切的 y 坐标位置。

    swidth  可选。被剪切图像的宽度。

    sheight  可选。被剪切图像的高度。

    x  在画布上放置图像的 x 坐标位置。

    y  在画布上放置图像的 y 坐标位置。

    width  可选。要使用的图像的宽度。(伸展或缩小图像)

    height  可选。要使用的图像的高度。(伸展或缩小图像)

     1 <canvas id="myCanvas" width="800" height="600">
     2         您的浏览器不支持canvas!
     3     </canvas>
     4     <script>
     5         var canvas = document.getElementById('myCanvas');
     6         if (canvas.getContext) {
     7             var ctx = canvas.getContext('2d');
     8             var img = new Image();
     9             img.onload = function() {
    10                 if (img.width != canvas.width)
    11                         canvas.width = img.width;
    12                     if (img.height != canvas.height)
    13                         canvas.height = img.height;
    14 
    15                     ctx.clearRect(0, 0, canvas.width, canvas.height);
    16                     ctx.drawImage(img, 0, 0); // 设置图像对象,以及它在画布上的位置
    17             };
    18             img.src = "tree.gif";
    19         }
    20     </script>

    注意:drawImage方法只能在图像完全载入后才能调用

    getImageData与putImageData

      getImageData() 方法返回 ImageData 对象,该对象拷贝了画布指定矩形的像素数据。putImageData() 方法将图像数据(从指定的 ImageData 对象)放回画布上。

    getImageData() 方法返回 ImageData 对象,该对象拷贝了画布指定矩形的像素数据。

    对于 ImageData 对象中的每个像素,都存在着四方面的信息,即 RGBA 值:

    • R - 红色 (0-255)
    • G - 绿色 (0-255)
    • B - 蓝色 (0-255)
    • A - alpha 通道 (0-255; 0 是透明的,255 是完全可见的)

    color/alpha 以数组形式存在,并存储于 ImageData 对象的 data 属性中。

    语法

      context.getImageData(x,y,width,height);

      context.putImageData(imgData,x,y,dirtyX,dirtyY,dirtyWidth,dirtyHeight);

    参数

    x  开始复制的左上角位置的 x 坐标。

    y  开始复制的左上角位置的 y 坐标。

    width  将要复制的矩形区域的宽度。

    height  将要复制的矩形区域的高度。

    imgData  规定要放回画布的 ImageData 对象。

    x  ImageData 对象左上角的 x 坐标,以像素计。

    y  ImageData 对象左上角的 y 坐标,以像素计。

    dirtyX  可选。水平值(x),以像素计,在画布上放置图像的位置。

    dirtyY  可选。水平值(y),以像素计,在画布上放置图像的位置。

    dirtyWidth  可选。在画布上绘制图像所使用的宽度。

    dirtyHeight  可选。在画布上绘制图像所使用的高度。

     1 <canvas id="myCanvas" width="800" height="600">
     2         您的浏览器不支持canvas!
     3     </canvas>
     4     <script>
     5         var c=document.getElementById("myCanvas");
     6         var ctx=c.getContext("2d");
     7         ctx.fillStyle="red";
     8         ctx.fillRect(10,10,50,50);
     9 
    10         var imgData=ctx.getImageData(30,30,50,50);
    11         red=imgData.data[0];
    12         green=imgData.data[1];
    13         blue=imgData.data[2];
    14         alpha=imgData.data[3];
    15     </script>

     toDataURL

      toDataURL()方法将canvas上的元素保存为图像。context.toDataURL()返回的是一串Base64编码的URL。

    语法

      context.toDataURL('canvas.png');

    参数

      canvas.png生成的图像

    save与restore

      save方法用于保存上下文环境,restore方法用于恢复到上一次保存的上下文环境,都没有参数。Canvas 状态是以堆(stack)的方式保存的,每一次调用 save 方法,当前的状态就会被推入堆中保存起来。会保存strokeStyle, fillStyle, globalAlpha, lineWidth, lineCap, lineJoin, miterLimit, shadowOffsetX, shadowOffsetY, shadowBlur, shadowColor, globalCompositeOperation 的值。你可以调用任意多次 save 方法。每一次调用 restore 方法,上一个保存的状态就从堆中弹出,所有设定都恢复。

    语法:

      context.save();

      context.restore();

     1 <canvas id="myCanvas" width="800" height="600">
     2         您的浏览器不支持canvas!
     3     </canvas>
     4     <script>
     5         window.onload=function(){
     6              var ctx=document.getElementById("myCanvas").getContext("2d");
     7              ctx.fillStyle = 'red';
     8              ctx.fillRect(10,10,150,150);
     9 
    10              ctx.save();
    11              ctx.fillStyle="green";
    12              ctx.fillRect(30,30,110,110);
    13 
    14              ctx.save();
    15              ctx.fillStyle="yellow";
    16              ctx.fillRect(50,50,70,70);
    17              ctx.restore();//回到上一个状态,即 ctx.fillStyle="green";
    18              ctx.save();
    19              ctx.fillRect(70,70,30,30);
    20              ctx.restore();
    21         }
    22     </script>

    效果

  • 相关阅读:
    EasyNVR H5无插件摄像机直播解决方案前端解析之:videojs的使用
    EasyNVR H5无插件摄像机直播解决方案前端解析之:videojs的使用
    高性能流媒体服务器EasyDSS前端重构(四)- webpack + video.js 打造流媒体服务器前端
    高性能流媒体服务器EasyDSS前端重构(四)- webpack + video.js 打造流媒体服务器前端
    高性能流媒体服务器EasyDSS前端重构(三)- webpack + vue + AdminLTE 多页面引入 element-ui
    高性能流媒体服务器EasyDSS前端重构(三)- webpack + vue + AdminLTE 多页面引入 element-ui
    高性能流媒体服务器EasyDSS前端重构(二) webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间
    高性能流媒体服务器EasyDSS前端重构(二) webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间
    高性能流媒体服务器EasyDSS前端重构(一)-从零开始搭建 webpack + vue + AdminLTE 多页面脚手架
    高性能流媒体服务器EasyDSS前端重构(一)-从零开始搭建 webpack + vue + AdminLTE 多页面脚手架
  • 原文地址:https://www.cnblogs.com/xiyangbaixue/p/4106185.html
Copyright © 2011-2022 走看看