cari
Rumahhujung hadapan webhtml tutorialCanvas入门(3):图像处理和绘制文字_html/css_WEB-ITnose

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

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

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

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

效果:

1、图像平铺

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

效果:

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

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

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

2、图像裁剪

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

效果:

3、像素处理

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

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

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
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
Dari teks ke laman web: Kekuatan HTMLDari teks ke laman web: Kekuatan HTMLApr 13, 2025 am 12:07 AM

HTML adalah bahasa yang digunakan untuk membina laman web, menentukan struktur laman web dan kandungan melalui tag dan atribut. 1) HTML menganjurkan struktur dokumen melalui tag, seperti,. 2) Penyemak imbas menghancurkan HTML untuk membina DOM dan menjadikan laman web. 3) Ciri -ciri baru HTML5, seperti, meningkatkan fungsi multimedia. 4) Kesilapan biasa termasuk label yang tidak terkawal dan nilai atribut yang tidak disebutkan. 5) Cadangan pengoptimuman termasuk menggunakan tag semantik dan mengurangkan saiz fail.

Memahami HTML, CSS, dan JavaScript: Panduan PemulaMemahami HTML, CSS, dan JavaScript: Panduan PemulaApr 12, 2025 am 12:02 AM

WebDevelopmentReliesOnhtml, CSS, andjavascript: 1) HtmlStructuresContent, 2) CSSStylesit, dan3) JavaScriptaddsInteractivity, Formingthebasisofmodernwebexperiences.

Peranan HTML: Penstrukturan Kandungan WebPeranan HTML: Penstrukturan Kandungan WebApr 11, 2025 am 12:12 AM

Peranan HTML adalah untuk menentukan struktur dan kandungan laman web melalui tag dan atribut. 1. HTML menganjurkan kandungan melalui tag seperti, menjadikannya mudah dibaca dan difahami. 2. Gunakan tag semantik seperti, dan lain -lain untuk meningkatkan kebolehcapaian dan SEO. 3. Mengoptimumkan kod HTML boleh meningkatkan kelajuan pemuatan laman web dan pengalaman pengguna.

HTML dan Kod: Melihat lebih dekat pada istilahHTML dan Kod: Melihat lebih dekat pada istilahApr 10, 2025 am 09:28 AM

Htmlisaspecifictypeofcodefocusedonstructuringwebcontent, manakala "kod" secara meluas ini

HTML, CSS, dan JavaScript: Alat penting untuk pemaju webHTML, CSS, dan JavaScript: Alat penting untuk pemaju webApr 09, 2025 am 12:12 AM

HTML, CSS dan JavaScript adalah tiga tiang pembangunan web. 1. HTML mentakrifkan struktur laman web dan menggunakan tag seperti, dan sebagainya. 2. CSS mengawal gaya laman web, menggunakan pemilih dan atribut seperti warna, saiz font, dan lain-lain.

Peranan HTML, CSS, dan JavaScript: Tanggungjawab TerasPeranan HTML, CSS, dan JavaScript: Tanggungjawab TerasApr 08, 2025 pm 07:05 PM

HTML mentakrifkan struktur web, CSS bertanggungjawab untuk gaya dan susun atur, dan JavaScript memberikan interaksi dinamik. Ketiga melaksanakan tugas mereka dalam pembangunan web dan bersama -sama membina laman web yang berwarna -warni.

Adakah HTML mudah belajar untuk pemula?Adakah HTML mudah belajar untuk pemula?Apr 07, 2025 am 12:11 AM

HTML sesuai untuk pemula kerana mudah dan mudah dipelajari dan dapat melihat hasilnya dengan cepat. 1) Keluk pembelajaran HTML adalah lancar dan mudah dimulakan. 2) Hanya menguasai tag asas untuk mula membuat laman web. 3) Fleksibiliti yang tinggi dan boleh digunakan dalam kombinasi dengan CSS dan JavaScript. 4) Sumber pembelajaran yang kaya dan alat moden menyokong proses pembelajaran.

Apakah contoh tag permulaan dalam html?Apakah contoh tag permulaan dalam html?Apr 06, 2025 am 12:04 AM

Anexampleofastartartingtaginhtmlis, yangbeginsaparagraph.startingtagsareessentialinhtmlasttheyinitiateelements, definetheirtypes, andarecrucialforstructuringwebpagesandconstructionthedom.

See all articles

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)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),