Heim > Web-Frontend > HTML-Tutorial > Canvas入门(3):图像处理和绘制文字_html/css_WEB-ITnose

Canvas入门(3):图像处理和绘制文字_html/css_WEB-ITnose

WBOY
Freigeben: 2016-06-24 11:56:23
Original
1257 Leute haben es durchsucht

来源:http://www.ido321.com/997.html

一、图像处理(非特别说明,所有结果均来自最新版Google)

在HTML 5中,不仅可以使用Canvas API绘制图形,也可以用于处理网络或磁盘中的图像文件,然后绘制在画布中。绘制图像时,需要使用drawImage()方法:

drawImage(image,x,y):image是图像引用,x,y是绘制图像时在画布中的起始位置

drawImage(image,x,y,w,h):前三个同上,w,h是绘制时图像的宽度和高度,可以用于缩放图像

drawImage(image,sx,sy,sw,sh,dx,dy,dw.dh): 将画布中已经绘制好的图像的全部或者局部复制到画布的另一个位置。sx,sy,sw,sh分别是原图中被复制区域的起始位置宽高,dx,dy,dw,dh 表示复制后图像在画布中的起始位置和高宽。

   1: // 获取canvas 的ID
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   2: var canvas = document.getElementById('canvas');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   3: if (canvas == null)
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   4: {
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   5: return false;
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   6: }
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   7: // 获取上下文
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   8: var context = canvas.getContext('2d');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   9: context.fillStyle = '#eeeeff';
Nach dem Login kopieren
Nach dem Login kopieren
  10: context.fillRect(0,0,400,300);
Nach dem Login kopieren
Nach dem Login kopieren
  11: var image = new Image();
Nach dem Login kopieren
Nach dem Login kopieren

12: image.src = ‘my.jpg’;

// onload事件实现边绘制边加载

  13: image.onload = function()
Nach dem Login kopieren
  14: {
Nach dem Login kopieren
  15: drawImage(context,image);
Nach dem Login kopieren
  16: };
Nach dem Login kopieren
  17: function drawImage(context,image)
Nach dem Login kopieren
  18: {
Nach dem Login kopieren
  19: for (var i = 0; i < 7; i++) {
Nach dem Login kopieren
  20: context.drawImage(image,0+i*50,0+i*25,100,100);
Nach dem Login kopieren
  21: };
Nach dem Login kopieren
Nach dem Login kopieren
  22: }
Nach dem Login kopieren

效果:

1、图像平铺

   1: // 获取canvas 的ID
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   2: var canvas = document.getElementById('canvas');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   3: if (canvas == null)
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   4: {
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   5: return false;
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   6: }
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   7: // 获取上下文
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   8: var context = canvas.getContext('2d');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   9: context.fillStyle = '#eeeeff';
Nach dem Login kopieren
Nach dem Login kopieren
  10: context.fillRect(0,0,400,300);
Nach dem Login kopieren
Nach dem Login kopieren
  11: var image = new Image();
Nach dem Login kopieren
Nach dem Login kopieren
  12: image.src = 'my.jpg';
Nach dem Login kopieren
  13: // onload事件实现边绘制边加载
Nach dem Login kopieren
  14: image.onload = function()
Nach dem Login kopieren
  15: {
Nach dem Login kopieren
  16: drawImage(canvas,context,image);
Nach dem Login kopieren
  17: };
Nach dem Login kopieren
  18: function drawImage(canvas,context,image)
Nach dem Login kopieren
  19: {
Nach dem Login kopieren
Nach dem Login kopieren
  20: // 平铺比例
Nach dem Login kopieren
  21: var scale = 5;
Nach dem Login kopieren
  22: // 缩小图像后宽度
Nach dem Login kopieren
  23: var n1 = image.width / scale;
Nach dem Login kopieren
  24: // 缩小图像后高度
Nach dem Login kopieren
  25: var n2 = image.height / scale;
Nach dem Login kopieren
  26: // 横向平铺个数
Nach dem Login kopieren
  27: var n3 = canvas.width / n1;
Nach dem Login kopieren
  28: // 纵向平铺个数
Nach dem Login kopieren
  29: var n4 = canvas.height / n2;
Nach dem Login kopieren
  30: for(var i = 0; i < n3; i++)
Nach dem Login kopieren
  31: {
Nach dem Login kopieren
  32: for(var j=0; j < n4; j++)
Nach dem Login kopieren
  33: {
Nach dem Login kopieren
  34: context.drawImage(image,i*n1,j*n2,n1,n2);
Nach dem Login kopieren
  35: }
Nach dem Login kopieren
  36: }
Nach dem Login kopieren
  37: }
Nach dem Login kopieren

效果:

在HTML 5中,利用context.createPattern(image,type)也可以实现平铺,type取值同background-image的平铺值一样。

   1: image.onload = function()
Nach dem Login kopieren
   2: {
Nach dem Login kopieren
   3: // drawImage(canvas,context,image);
Nach dem Login kopieren
   4: var ptrn = context.createPattern(image,'repeat');
Nach dem Login kopieren
   5: context.fillStyle = ptrn;
Nach dem Login kopieren
   6: context.fillRect(0,0,400,300);
Nach dem Login kopieren
   7: };
Nach dem Login kopieren

能同样实现平铺(图片没有缩放,所以是原图大小平铺)

2、图像裁剪

   1: // 获取canvas 的ID
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   2: var canvas = document.getElementById('canvas');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   3: if (canvas == null)
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   4: {
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   5: return false;
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   6: }
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   7: // 获取上下文
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   8: var context = canvas.getContext('2d');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   9: // 获取渐变对象
Nach dem Login kopieren
  10: var g1 = context.createLinearGradient(0,400,300,0);
Nach dem Login kopieren
  11: // 添加渐变颜色
Nach dem Login kopieren
  12: g1.addColorStop(0,'rgb(255,255,0)');
Nach dem Login kopieren
  13: g1.addColorStop(1,'rgb(0,255,255)');
Nach dem Login kopieren
  14: context.fillStyle = g1;
Nach dem Login kopieren
  15: context.fillRect(0,0,400,300);
Nach dem Login kopieren
  16: var image = new Image();
Nach dem Login kopieren
  17: // onload事件实现边绘制边加载
Nach dem Login kopieren
  18: image.onload = function()
Nach dem Login kopieren
  19: {
Nach dem Login kopieren
Nach dem Login kopieren
  20: drawImage(context,image);
Nach dem Login kopieren
  21: };
Nach dem Login kopieren
Nach dem Login kopieren
  22: image.src = 'my.jpg';
Nach dem Login kopieren
  23: function drawImage(context,image)
Nach dem Login kopieren
  24: {
Nach dem Login kopieren
  25: create5StarClip(context);
Nach dem Login kopieren
  26: context.drawImage(image,-50,-150,300,300);
Nach dem Login kopieren
  27: }
Nach dem Login kopieren
  28: function create5StarClip(context)
Nach dem Login kopieren
  29: {
Nach dem Login kopieren
  30: var dx = 100;
Nach dem Login kopieren
  31: var dy = 0;
Nach dem Login kopieren
  32: var s = 150;
Nach dem Login kopieren
  33: // 创建路径
Nach dem Login kopieren
  34: context.beginPath();
Nach dem Login kopieren
  35: context.translate(100,150);
Nach dem Login kopieren
  36: var x = Math.sin(0);
Nach dem Login kopieren
  37: var y = Math.cos(0);
Nach dem Login kopieren
  38: var dig = Math.PI/5 *4;
Nach dem Login kopieren
  39: // context.moveTo(dx,dy);
Nach dem Login kopieren
  40: for (var i = 0; i < 5; i++) {
Nach dem Login kopieren
  41: var x = Math.sin(i * dig);
Nach dem Login kopieren
  42: var y = Math.cos(i * dig);
Nach dem Login kopieren
  43: context.lineTo(dx+x*s,dy+y*s);
Nach dem Login kopieren
  44: }
Nach dem Login kopieren
  45: context.clip();
Nach dem Login kopieren
  46: }
Nach dem Login kopieren

效果:

3、像素处理

   1: // 获取canvas 的ID
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   2: var canvas = document.getElementById('canvas');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   3: if (canvas == null)
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   4: {
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   5: return false;
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   6: }
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   7: // 获取上下文
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   8: var context = canvas.getContext('2d');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   9: var image = new Image();
Nach dem Login kopieren
  10: image.src = 'my.jpg';
Nach dem Login kopieren
  11: // onload事件实现边绘制边加载
Nach dem Login kopieren
  12: image.onload = function()
Nach dem Login kopieren
  13: {
Nach dem Login kopieren
  14: context.drawImage(image,0,0);
Nach dem Login kopieren
  15: // 获取原图像素
Nach dem Login kopieren
  16: var imageData = context.getImageData(0,0,image.width,image.height);
Nach dem Login kopieren
  17: for (var i = 0,n= imageData.data.length; i <n; i += 4) {
Nach dem Login kopieren
  18: // red
Nach dem Login kopieren
  19: imageData.data[i+0] = 255-imageData.data[i+0];
Nach dem Login kopieren
  20: // green
Nach dem Login kopieren
  21: imageData.data[i+1] = 255-imageData.data[i+2];
Nach dem Login kopieren
  22: // blue
Nach dem Login kopieren
  23: imageData.data[i+2] = 255-imageData.data[i+1];
Nach dem Login kopieren
  24: };
Nach dem Login kopieren
  25: // 将调整后的像素应用到图像
Nach dem Login kopieren
  26: context.putImageData(imageData,0,0);
Nach dem Login kopieren
  27: };
Nach dem Login kopieren

getImageData(sx,sy,sw,sh):表示获取像素区域的起始坐标和 高宽,返回一个具有width,height,data等属性CanvasPixelArray对象,其中data属性存放像素数据的数组,形如 [r1,g1,b1,a1,r2,g2,b2,a2……],r1,g1,b1,a1分别是第一个像素的红绿蓝值及透明度,以此类推。

putImageData(imagedata,dx,dy[,dirtyx,dirtyy,dirtyWidth,dirtyHeight]): 将像素数据重新绘制到图像上。imagedata是像素数组,dx,dy表示重绘的起始位置,后面四个参数是给出一个矩形的左上角坐标和高宽。

Canvas API的像素操作只有部分浏览器支持,截图效果来自新版的火狐浏览器

二、绘制文字

   1: // 获取canvas 的ID
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   2: var canvas = document.getElementById('canvas');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   3: if (canvas == null)
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   4: {
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   5: return false;
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   6: }
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   7: // 获取上下文
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   8: var context = canvas.getContext('2d');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   9: context.fillStyle = '#00f';
Nach dem Login kopieren
  10: // 设置文字属性
Nach dem Login kopieren
  11: context.font = 'italic 30px sans-serif';
Nach dem Login kopieren
  12: context.textBaseline = 'top';
Nach dem Login kopieren
  13: // 填充字符串
Nach dem Login kopieren
  14: context.fillText('Canvas绘制文字',0,0);
Nach dem Login kopieren
  15: context.font = 'bold 30px sans-serif';
Nach dem Login kopieren
  16: // 轮廓字符串
Nach dem Login kopieren
  17: context.strokeText('改变位置了',50,50);
Nach dem Login kopieren

fillText(string,x,y[,maxwidth]):前三个不解释,maxwidth表示显示文字的最大宽度,可防止文字溢出

strokeText(string,x,y[,maxwidth]:同上。

文字属性设置

font:设置字体

textAlign:水平对齐方式,取值可是start/end/left/right/center.默认是start

textBaseline:垂直对齐方式,取值可是top/hanging/middle/alphabetic/ideographic/bottom.默认是alphabetic

最终效果


下一篇:9个JQuery和5个JavaScript经典面试题

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage