摘要:

  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  可选。要使用的图像的高度。(伸展或缩小图像)

 <canvas id="myCanvas" width="800" height="600">
您的浏览器不支持canvas!
</canvas>
<script>
var canvas = document.getElementById('myCanvas');
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
var img = new Image();
img.onload = function() {
if (img.width != canvas.width)
canvas.width = img.width;
if (img.height != canvas.height)
canvas.height = img.height; ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(img, 0, 0); // 设置图像对象,以及它在画布上的位置
};
img.src = "tree.gif";
}
</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  可选。在画布上绘制图像所使用的高度。

 <canvas id="myCanvas" width="800" height="600">
您的浏览器不支持canvas!
</canvas>
<script>
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.fillStyle="red";
ctx.fillRect(10,10,50,50); var imgData=ctx.getImageData(30,30,50,50);
red=imgData.data[0];
green=imgData.data[1];
blue=imgData.data[2];
alpha=imgData.data[3];
</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();

 <canvas id="myCanvas" width="800" height="600">
您的浏览器不支持canvas!
</canvas>
<script>
window.onload=function(){
var ctx=document.getElementById("myCanvas").getContext("2d");
ctx.fillStyle = 'red';
ctx.fillRect(10,10,150,150); ctx.save();
ctx.fillStyle="green";
ctx.fillRect(30,30,110,110); ctx.save();
ctx.fillStyle="yellow";
ctx.fillRect(50,50,70,70);
ctx.restore();//回到上一个状态,即 ctx.fillStyle="green";
ctx.save();
ctx.fillRect(70,70,30,30);
ctx.restore();
}
</script>

效果

HTML5标签canvas图像处理的更多相关文章

  1. html5标签canvas函数drawImage使用方法

    html5中标签canvas,函数drawImage(): 使用drawImage()方法绘制图像.绘图环境提供了该方法的三个不同版本.参数传递三种形式: drawImage(image,x,y):在 ...

  2. HTML5标签canvas制作平面图

    摘要: HTML5规范已经完成了,互联网上已经有数不清的站点使用了HTML5.从现在开始研究HTML5,本文是自己在学习canvas过程中的记录,以备后需. 历史: 这个 HTML 元素是为了客户端矢 ...

  3. HTML5标签canvas制作动画

    摘要: canvas可以绘制图像,自然而然的就可以制作动画,因为动画的每一帧都是图像.我们可以利用javascript的setInterval函数来实现动画效果. 下面是一个例子,小圆绕着红点圆心不停 ...

  4. HTML5新增Canvas标签及对应属性、API详解(基础一)

    知识说明: HTML5新增的canvas标签,通过创建画布,在画布上创建任何想要的形状,下面将canvas的API以及属性做一个整理,并且附上时钟的示例,便于后期复习学习!Fighting! 一.标签 ...

  5. 完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法

    完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法   HTML5的语义化标签以及属性,可以让开发者非常方便地实现清晰的web页面布局,加上CSS3的效果渲染,快速建立丰富灵活的web页 ...

  6. HTML5标签与HTML4标签的区别示例介绍_html5教程技巧

    (1)概念的变化: HTML5专注内容与结构,而不专注的表现 <header> <hgroup>导航相关数据</hgroup> </header> &l ...

  7. HTML5在canvas中绘制复杂形状附效果截图

    HTML5在canvas中绘制复杂形状附效果截图 一.绘制复杂形状或路径 在简单的矩形不能满足需求的情况下,绘图环境提供了如下方法来绘制复杂的形状或路径. beginPath() : 开始绘制一个新路 ...

  8. 解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法

    方式一:Coding JavaScript <!--[if lt IE9]> <script> (function() { var e = "abbr, articl ...

  9. HTML5之Canvas时钟(网页效果--每日一更)

    今天,带来的是使用HTML5中Canvas标签实现的动态时钟效果. 话不多说,先看效果:亲,请点击这里 众所周知,Canvas标签是HTML5中的灵魂,HTML5 Canvas是屏幕上的一个由Java ...

随机推荐

  1. 宇宙最强spacemacs

    这个标题背后的潜台词其实是:逼格是什么炼成的? 此处省略一万字. Emacs就不多说了,神之编辑器,但其快捷键实在是....Evil.好啦,现在来了Spacemacs,结合Vim与Emacs二者的优点 ...

  2. uboot下的网络终端/控制台

    许多linux设备可能没有外置串口,这是就需要一个网络终端来在uboot下操作设备,如升级镜像等. uboot下的网络终端为netconsole,代码drivers/net/netconsole.c. ...

  3. Java编程的逻辑 (33) - Joda-Time

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  4. 《开发专家 Visual C 开发入行真功夫》笔记

    智能感知的功能,输入 is 后,同时按下Alt + →这两个键就出现了供选择变量.方法.宏等的列表,继续输入 in 后,isInit就出来了. stdafx.h预编译头文件,.h应用程序主头文件,do ...

  5. android控制软键盘弹出方式

    android一把自带的软键盘弹出方式是会将布局顶上去,造成UI乱套的情况. 解决办法:方法一:在你的activity中的oncreate中setContentView之前写上这个代码getWindo ...

  6. HBase的compact分析

    HBase是基于LSM树存储模型的分布式NoSQL数据库.LSM树对比普遍的B+树来说,能够获得较高随机写性能的同时,也能保持可靠的随机读性能(可参考这里).在进行读请求的时候,LSM树要把多个子树( ...

  7. 常用包管理三类工具:dpkg、apt和aptitude

    常用的包管理包含三类工具:dpkg.apt和aptitude.人们总是对前面的两个工具用得比较多,而对 aptitude 用得比较少,事实上 aptitude 是很强大的. 在这里,对这三个工具做一点 ...

  8. resin4.0.23+nginx1.1集群

    一,web服务器小论 以前的公司使用的web服务器是tomcat(tomcat+apache作集群),现在的公司是一家互联网公司,采用的架构是resin+nginx作集群(resin比tomcat快? ...

  9. Java如何从数组中查找对象元素?

    在Java中,如何从数组中查找对象元素? 示例 以下示例使用Contains方法来搜索数组中的String对象. package com.yiibai; import java.util.*; pub ...

  10. 使用Maven构建项目

    要构建一个基于Maven的项目,打开控制台,进入到 pom.xml 文件所放的项目文件夹,并发出以下命令: mvn package 这将执行Maven的“package”阶段. Maven构建生命周期 ...