canvas处理图片

 canvas绘制图片的三种方法:

    drawImage(image, x, y)

    drawImage(image, x, y, width, height)

    drawImage(image, sourceX, sourceY, sourceWidth, sourceHeight,destX, destY, destWidth, destHeight)

 参数:

   image:所要绘制的图像。这必须是表示 <img> 标记或者屏幕外图像的 Image 对象,或者是 Canvas 元素

     x,y:要绘制的图像的左上角的位置。

   width,height:图像所应该绘制的尺寸。指定这些参数使得图像可以缩放

     sourceX,sourceY: 图像将要被绘制的区域的左上角。这些整数参数用图像像素来度量

   sourceWidth, sourceHeight:图像所要绘制区域的大小,用图像像素表示

   destX, destY:所要绘制的图像区域的左上角的画布坐标 

   destWidth, destHeight:图像区域所要绘制的画布大小

 

 对canvas绘制的图片处理:

    1、复制画布上指定的矩形的像素数据

      var imageDatas = ctx.getImageData(x, y, width, height);

      参数:

       x,y:复制的左上角位置的 x、y 坐标。

       width,heigth:将要复制的矩形区域的宽度、高度

    2、获取指定矩形区域的rgba

      var dataArray = imageDatas.data;

    3、通过for循环对每个像素点设置新的rgba

      如反色:255 减去 r g b 现在的值

       灰色处理(r g b等值):可以将现在的 r g b 加起来除以3再分别赋值

       透明度:设置dataArray[i + 3]的值即可

    4、图像数据放回画布上

      ctx.putImageData(imageDatas,x,y,dirtyX,dirtyY,dirtyWidth,dirtyHeight);

      参数:

        imageDatas:放回画布的 imageDatas对象

        x,y:要绘制的图像的左上角的位置    

        dirtyX,dirtyY(可选):在画布上放置图像的位置

        dirtyWidth,dirtyHeight(可选):在画布上绘制图像所使用的宽度、高度。

    如下代码为设置透明度。

  var imageDatas = ctx.getImageData(0, 0, 450, 450);    //复制画布上指定的矩形的像素数据
  var dataArray = imageDatas.data;               //获取矩形区域的 rgba,范围均是(0-255)
    for (var i = 0 ; i < dataArray.length ; i += 4) {    
        var r = dataArray[i];                  //设置新的 rgba
        var g = dataArray[i+1];
        var b = dataArray[i+2];
        var a = dataArray[i + 3];                //此处代表图片的透明度(透明度也是 0-255)
        dataArray[i] = r;                    //赋予矩形区域新的 rgba 值
        dataArray[i + 1] = g;
        dataArray[i + 2] = b;
        dataArray[i + 3] = a * 0.2;
    }
   ctx.putImageData(imageDatas, 0, 0);
时间: 2024-12-18 00:45:31

canvas处理图片的相关文章

Canvas处理头像上传

未分类 最近社区系统需要支持移动端,其中涉及到用户头像上传,头像有大中小三种尺寸,在PC端,社区用Flash来处理头像编辑和生成,但该Flash控件的界面不友好而且移动端对Flash的支持不好,考虑到这些问题,最后我们选用Canvas来完成图像尺寸缩放和图片数据获取. 等边处理 头像一般都是正方形,首先我们需要获取图片宽度和高度的最小值,用该最小值作为边长居中裁剪图片,最终得到一个正方形的图片: var ImageEditor = function() { // 用离线canvas处理图片数据

水印效果

图片涂鸦和水印其实是一个功能,实现的方式是一样的,就是一张大图片和一张小点图片叠加即可.前面在android图像处理系列之六--给图片添加边框(下)-图片叠加中也讲到了图片叠加,里面实现的原理是直接操作像素点.下面给出别外一种方式让图片叠加--用Canvas处理图片,canvas已经封装好了,直接调用就行. 下面看效果: += 代码: [java] view plaincopy /** * 组合涂鸦图片和源图片 * @param src 源图片 * @param watermark 涂鸦图片 *

H5小内容(三)

Canvas(画布)   基本内容     简单来说,HTML5提供的新元素<canvas>     Canvas在HTML页面提供画布的功能       在画布中绘制各种图形     Canvas绘制的图形与HTML页面无关       无法通过DOM获取绘制的图形       无法为绘制的图形绑定DOM事件     只能使用Canvas提供的API     Canvas用途       在HTML页面中绘制图表(例如柱状图.饼状图等)       网页游戏 - Flash技术       

android图像处理系列之七--图片涂鸦,水印-图片叠加

图片涂鸦和水印其实是一个功能,实现的方式是一样的,就是一张大图片和一张小点图片叠加即可.前面在android图像处理系列之六--给图片添加边框(下)-图片叠加中也讲到了图片叠加,里面实现的原理是直接操作像素点.下面给出别外一种方式让图片叠加--用Canvas处理图片,canvas已经封装好了,直接调用就行. 下面看效果: += 代码: [java] view plain copy /** * 组合涂鸦图片和源图片 * @param src 源图片 * @param watermark 涂鸦图片

HTML笔记(2)——HTML5新属性

HTML5 DAY01: 基本内容 HTML5目前最新的规范(标准)是2014年10月推出 2005年左右出现HTML5版本(非标准) W3C组织(两个组织定义H5规范) 学习(研究)HTML5是学习未来(将来主流) HTML版本 - 第一阶段主要学习还是4版本(包含5版本) <header><nav> HTML5版本之后,声明不再出现版本信息 有意地版本,以后可能不再会有新版本 HTML5的规范内容实时更新 注意 HTML5永远都不可能离开javascript. HTML5在移动

H5(三)

Canvas(画布)   基本内容     简单来说,HTML5提供的新元素<canvas>     Canvas在HTML页面提供画布的功能       在画布中绘制各种图形     Canvas绘制的图形与HTML页面无关       无法通过DOM获取绘制的图形       无法为绘制的图形绑定DOM事件     只能使用Canvas提供的API     Canvas用途       在HTML页面中绘制图表(例如柱状图.饼状图等)       网页游戏 - Flash技术       

html2canvas+Canvas2Image分享海报功能踩坑

首先需要 import html2canvas from 'html2canvas'; import {Canvas2Image} from '../../assets/js/plug/canvas2image.js'; getBase64Image(data) { let that = this; var canvas = document.createElement("canvas"); canvas.width = $(data.dom).width(); canvas.heig

Canvas初探

虽然自己身为后端工程师,但仍然有一颗前端的??,尤其是游戏前端.所以最近在试着学习如何用js编写html5游戏,并看了一个简单的‘俄罗斯方块’的js游戏源码,结论有以下几点. 1.图像效果实现可以基于canvas 和 css 两种,估计多数的js游戏开发引擎也是这样的. 2.Js写些简单好玩的游戏所需要的环境很简单:浏览器,Js文件编辑器,一个发布html静态网页的WebServer. 这里简单说下学习Canvas的一些东东,网上看找了个教程网站:http://javascript.ruanyi

H5 canvas 实现飞机大战游戏

首先看几张效果图: 上面三张图分别对应游戏的三种状态 ready,play,pause.体验一下 先介绍一下canvas 画图的原理,在这个游戏中的背景,飞机,子弹以及飞机被击中爆炸的效果都是一张张的图片,通过canvas的 drawImage() 函数把这一帧需要的所有图片按其所在的位置(坐标)画到画布上,当然有时候也需要画些文本,比如左上角的得分:然后接着画下一帧,同时改变飞机和子弹的位置:画下一帧之前一定要清除画布(通过这个函数 clearRect(x,  y, width, height