Rumah hujung hadapan web 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
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
   2: var canvas = document.getElementById('canvas');
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
   3: if (canvas == null)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
   4: {
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
   5: return false;
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
   6: }
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
   7: // 获取上下文
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
   8: var context = canvas.getContext('2d');
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
   9: context.fillStyle = '#eeeeff';
Salin selepas log masuk
Salin selepas log masuk
  10: context.fillRect(0,0,400,300);
Salin selepas log masuk
Salin selepas log masuk
  11: var image = new Image();
Salin selepas log masuk
Salin selepas log masuk

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

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

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

效果:

1、图像平铺

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

效果:

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

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

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

2、图像裁剪

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

效果:

3、像素处理

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

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

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

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah tujuan & lt; kemajuan & gt; unsur? Apakah tujuan & lt; kemajuan & gt; unsur? Mar 21, 2025 pm 12:34 PM

Artikel ini membincangkan html & lt; kemajuan & gt; elemen, tujuan, gaya, dan perbezaan dari & lt; meter & gt; elemen. Tumpuan utama adalah menggunakan & lt; kemajuan & gt; untuk menyelesaikan tugas dan & lt; meter & gt; untuk stati

Apakah tujuan & lt; DATALIST & GT; unsur? Apakah tujuan & lt; DATALIST & GT; unsur? Mar 21, 2025 pm 12:33 PM

Artikel ini membincangkan html & lt; datalist & gt; elemen, yang meningkatkan bentuk dengan menyediakan cadangan autokomplete, meningkatkan pengalaman pengguna dan mengurangkan kesilapan. Kira -kira: 159

Apakah amalan terbaik untuk keserasian penyemak imbas dalam HTML5? Apakah amalan terbaik untuk keserasian penyemak imbas dalam HTML5? Mar 17, 2025 pm 12:20 PM

Artikel membincangkan amalan terbaik untuk memastikan keserasian silang pelayar HTML5, memberi tumpuan kepada pengesanan ciri, peningkatan progresif, dan kaedah ujian.

Apakah tujuan & lt; meter & gt; unsur? Apakah tujuan & lt; meter & gt; unsur? Mar 21, 2025 pm 12:35 PM

Artikel ini membincangkan html & lt; meter & gt; elemen, digunakan untuk memaparkan nilai skalar atau pecahan dalam julat, dan aplikasi umum dalam pembangunan web. Ia membezakan & lt; meter & gt; dari & lt; kemajuan & gt; dan Ex

Bagaimana saya menggunakan atribut pengesahan borang html5 untuk mengesahkan input pengguna? Bagaimana saya menggunakan atribut pengesahan borang html5 untuk mengesahkan input pengguna? Mar 17, 2025 pm 12:27 PM

Artikel ini membincangkan menggunakan atribut pengesahan bentuk HTML5 seperti had, corak, min, max, dan panjang untuk mengesahkan input pengguna secara langsung dalam penyemak imbas.

Apakah tag meta viewport? Mengapa penting untuk reka bentuk responsif? Apakah tag meta viewport? Mengapa penting untuk reka bentuk responsif? Mar 20, 2025 pm 05:56 PM

Artikel ini membincangkan tag Meta Viewport, penting untuk reka bentuk web responsif pada peranti mudah alih. Ia menerangkan bagaimana penggunaan yang betul memastikan skala kandungan yang optimum dan interaksi pengguna, sementara penyalahgunaan boleh membawa kepada isu reka bentuk dan kebolehaksesan.

Apakah tujuan & lt; iframe & gt; Tag? Apakah pertimbangan keselamatan semasa menggunakannya? Apakah tujuan & lt; iframe & gt; Tag? Apakah pertimbangan keselamatan semasa menggunakannya? Mar 20, 2025 pm 06:05 PM

Artikel ini membincangkan & lt; iframe & gt; Tujuan TAG dalam membenamkan kandungan luaran ke dalam halaman web, kegunaan umum, risiko keselamatan, dan alternatif seperti tag objek dan API.

GITEE PAGES PENYEDIAAN LAMAN WEB STATIC Gagal: Bagaimana menyelesaikan masalah dan menyelesaikan kesilapan fail tunggal 404? GITEE PAGES PENYEDIAAN LAMAN WEB STATIC Gagal: Bagaimana menyelesaikan masalah dan menyelesaikan kesilapan fail tunggal 404? Apr 04, 2025 pm 11:54 PM

Giteepages Statik Laman Web Penggunaan Gagal: 404 Penyelesaian Masalah dan Resolusi Ralat Semasa Menggunakan Gitee ...

See all articles