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

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

Jun 24, 2016 am 11:56 AM

来源: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经典面试题

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist der Zweck des & lt; Fortschritts & gt; Element? Was ist der Zweck des & lt; Fortschritts & gt; Element? Mar 21, 2025 pm 12:34 PM

Der Artikel erörtert den HTML & lt; Progress & gt; Element, Absicht, Styling und Unterschiede vom & lt; Meter & gt; Element. Das Hauptaugenmerk liegt auf der Verwendung & lt; Fortschritt & gt; Für Aufgabenabschluss und & lt; Meter & gt; für stati

Was ist der Zweck des & lt; datalist & gt; Element? Was ist der Zweck des & lt; datalist & gt; Element? Mar 21, 2025 pm 12:33 PM

Der Artikel erörtert den HTML & lt; Datalist & gt; Element, das die Formulare verbessert, indem automatische Vorschläge bereitgestellt, die Benutzererfahrung verbessert und Fehler reduziert werden.Character Count: 159

Was sind die besten Praktiken für die Kompatibilität des Cross-Browsers in HTML5? Was sind die besten Praktiken für die Kompatibilität des Cross-Browsers in HTML5? Mar 17, 2025 pm 12:20 PM

In Artikel werden Best Practices zur Gewährleistung der HTML5-Cross-Browser-Kompatibilität erörtert und sich auf die Erkennung von Merkmalen, die progressive Verbesserung und die Testmethoden konzentriert.

Was ist der Zweck des & lt; Meter & gt; Element? Was ist der Zweck des & lt; Meter & gt; Element? Mar 21, 2025 pm 12:35 PM

Der Artikel erörtert das HTML & lt; Meter & gt; Element, verwendet zur Anzeige von Skalar- oder Bruchwerten innerhalb eines Bereichs und seine gemeinsamen Anwendungen in der Webentwicklung. Es differenziert & lt; Meter & gt; von & lt; Fortschritt & gt; und Ex

Wie benutze ich die HTML5 & lt; Zeit & gt; Element, um Daten und Zeiten semantisch darzustellen? Wie benutze ich die HTML5 & lt; Zeit & gt; Element, um Daten und Zeiten semantisch darzustellen? Mar 12, 2025 pm 04:05 PM

Dieser Artikel erklärt den HTML5 & lt; Time & gt; Element für semantische Datum/Uhrzeit. Es betont die Wichtigkeit des DateTime-Attributs für die Maschinenlesbarkeit (ISO 8601-Format) neben menschenlesbarem Text, das Zubehör steigert

Wie verwende ich HTML5 -Formularvalidierungsattribute, um die Benutzereingabe zu validieren? Wie verwende ich HTML5 -Formularvalidierungsattribute, um die Benutzereingabe zu validieren? Mar 17, 2025 pm 12:27 PM

In dem Artikel werden unter Verwendung von HTML5 -Formularvalidierungsattributen wie Erforderlich, Muster, Min, MAX und Längengrenzen erörtert, um die Benutzereingabe direkt im Browser zu validieren.

Was ist das Ansichtsfenster -Meta -Tag? Warum ist es wichtig für reaktionsschnelles Design? Was ist das Ansichtsfenster -Meta -Tag? Warum ist es wichtig für reaktionsschnelles Design? Mar 20, 2025 pm 05:56 PM

In dem Artikel wird das Ansichtsfenster -Meta -Tag erörtert, das für das reaktionsschnelle Webdesign auf mobilen Geräten unerlässlich ist. Es wird erläutert, wie die ordnungsgemäße Verwendung eine optimale Skalierung von Inhalten und Benutzerinteraktion gewährleistet, während Missbrauch zu Design- und Zugänglichkeitsproblemen führen kann.

Was ist der Zweck des & lt; iframe & gt; Etikett? Was sind die Sicherheitsüberlegungen bei der Verwendung? Was ist der Zweck des & lt; iframe & gt; Etikett? Was sind die Sicherheitsüberlegungen bei der Verwendung? Mar 20, 2025 pm 06:05 PM

Der Artikel erörtert das & lt; iframe & gt; Der Zweck von Tag, externe Inhalte in Webseiten, seine gemeinsamen Verwendungen, Sicherheitsrisiken und Alternativen wie Objekt -Tags und APIs einzubetten.

See all articles