当前位置:   article > 正文

HTML5利用Canvas绘制图形(使用图像、裁剪区域、使用文本。阴影效果和操作像素)_canvas表格标注图像区域

canvas表格标注图像区域

使用图像

canvas中插入图像

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Insert title here</title>
  6. <script type="text/javascript">
  7. function Draw(){
  8. //使用三种方式插入图像
  9. var canvas=document.getElementById("canvas");
  10. var context=canvas.getContext("2d");
  11. var newImg=new Image(); //使用Image()构造函数创建图像对象
  12. newImg.src="../img/3.jpg";
  13. newImg.οnlοad=function(){
  14. //从左上角开始绘制图像
  15. context.drawImage(newImg,0,0);
  16. //从指定坐标开始绘制图像,并设置图像宽和高 指定这些参数可以使得图像可以缩放
  17. context.drawImage(newImg,250,100,150,200);
  18. //裁剪一部分图像放在左上角,并稍微放大
  19. context.drawImage(newImg,90,80,100,100,0,0,120,120);
  20. }
  21. }
  22. window.addEventListener("load",Draw,false);
  23. </script>
  24. </head>
  25. <body>
  26. <canvas id="canvas" width="400" height="300">你的浏览器不支持该功能!</canvas>
  27. </body>
  28. </html>

三种方法插入图片的效果


裁剪区域

      在路径绘图中,我们使用了两大绘图方法,即用于绘制线条的 stroke()方法和用于填充区域的fill()方法。关于路径的处理,还用一种方法叫做裁剪方法clip()。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>裁剪区域</title>
  6. <script type="text/javascript">
  7. function Draw(){
  8. //使用裁剪区域绘图
  9. var canvas=document.getElementById("canvas");
  10. var context=canvas.getContext("2d");
  11. var newImg=new Image(); //使用Image()构造函数创建图像对象
  12. newImg.src="../img/3.jpg";
  13. newImg.οnlοad=function(){
  14. //设置一个圆形的裁剪区域
  15. ArcClip(context);
  16. //从左上角开始绘制图像
  17. context.drawImage(newImg,0,0);
  18. //设置全局半透明
  19. context.globalAlpha=0.6;
  20. //使用路径绘制的矩形
  21. FillRect(context);
  22. }
  23. }
  24. function ArcClip(context){
  25. context.beginPath();
  26. context.arc(150,150,100,0,Math.PI*2,true);//设置一个圆形的绘图路径
  27. context.clip(); //裁剪区域
  28. }
  29. //使用路径绘制的矩形
  30. function FillRect(context){
  31. context.beginPath();
  32. context.rect(150,150,90,90);
  33. context.fillStyle="#f90";
  34. context.fill();
  35. }
  36. window.addEventListener("load",Draw,false);
  37. </script>
  38. </head>
  39. <body>
  40. <canvas id="canvas" width="400" height="300">你的浏览器不支持该功能!</canvas>
  41. </body>
  42. </html>

高大上效果

注:在绘制图片之前,,首先使用方法 ArcClip(context)设置一个圆形裁剪的区域:先设置一个圆形的绘图路径,再调用 clip()方法,即完成了区域的裁剪。接着绘制了图像,把加载的图片,从画布的左上角开始绘制,可以看见,只有在裁剪区域里才有绘制。最后,又使用了路径的方法回执了矩形,并填充了半透明的颜色,也只在裁剪区域内有绘制。


把Draw函数做一下改动就可以取消裁剪区域

  1. function Draw2(){
  2. //使用裁剪区域绘图
  3. var canvas=document.getElementById("canvas");
  4. var context=canvas.getContext("2d");
  5. var newImg=new Image(); //使用Image()构造函数创建图像对象
  6. newImg.src="../img/3.jpg";
  7. newImg.οnlοad=function(){
  8. //保存当前状态
  9. context.save();
  10. //设置一个圆形的裁剪区域
  11. ArcClip(context);
  12. //从左上角开始绘制图像
  13. context.drawImage(newImg,0,0);
  14. //恢复被保存的状态
  15. context.restore();
  16. //设置全局半透明
  17. context.globalAlpha=0.6;
  18. //使用路径绘制的矩形
  19. FillRect(context);
  20. }
  21. }
  22. function ArcClip(context){
  23. context.beginPath();
  24. context.arc(150,150,100,0,Math.PI*2,true);//设置一个圆形的绘图路径
  25. context.clip(); //裁剪区域
  26. }
  27. //使用路径绘制的矩形
  28. function FillRect(context){
  29. context.beginPath();
  30. context.rect(150,150,90,90);
  31. context.fillStyle="#f90";
  32. context.fill();
  33. }
  34. window.addEventListener("load",Draw2,false);

仔细观察一下与上幅图的区别

在裁剪区域之前,首先调用了save()方法保存了当前上下文的状态;在裁剪区域内绘制了图片之后,调用了 restore()方法恢复了上下文状态,即裁剪区域之前的状态,所以在接下来的绘图中不再受裁剪区域限制。如图中的矩形已经超出了裁剪区域的范围。

使用文本

在Canvas中,也可以绘制文本。可以使用填充的方法绘制,也可以使用描边的方法绘制,并且在绘制文字之前,还可以设置文字的文字样式和对齐方式。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>绘制文本</title>
  6. <script type="text/javascript">
  7. function Draw(){
  8. var canvas=document.getElementById("canvas");
  9. var context=canvas.getContext("2d");
  10. //填充方式绘制文本
  11. context.fillStyle="#f90";
  12. context.font="bold 36px impact";
  13. //fillText(text,x,y,maxwidth) text要绘制的文本,x起点横坐标,y纵坐标,maxwidth可选参数,表示文本的最大宽度
  14. context.fillText("Hello World!",10,50);
  15. //描边方式绘制文本
  16. context.strokeStyle="#90";
  17. context.font="bold italic 36px impact";
  18. context.strokeText("Hello World!",10,100);
  19. //度量绘制文本宽度
  20. var text="Hllo World!";
  21. context.fillStyle="#90";
  22. context.font="bold 30px impact";
  23. //度量文本是以当前设置的文本样式为基础。
  24. var tm=context.measureText(text);
  25. //根据已经设置的文本样式度量文本
  26. context.fillText(text,10,150);
  27. context.fillText(tm.width,tm.width+15,150);
  28. }
  29. window.addEventListener("load",Draw,false);
  30. </script>
  31. </head>
  32. <body>
  33. <canvas id="canvas" width="400" height="300">你的浏览器不支持canvas</canvas>
  34. </body>
  35. </html>

呐呐,运行效果,感觉如何


阴影效果

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>绘制文本</title>
  6. <script type="text/javascript">
  7. function Draw(){
  8. var canvas=document.getElementById("canvas");
  9. var context=canvas.getContext("2d");
  10. //设置阴影属性
  11. context.shadowColor="#666"; //颜色
  12. context.shadowOffsetX=5;//阴影的横向位移量,向右为正,左为负
  13. context.shadowOffsetY=5; //纵向位移量,向下为正,上为负
  14. context.shadowBlur=5.5; //高斯模糊,值越大,阴影边缘越模糊
  15. //填充方式绘制文本
  16. context.fillStyle="#f90";
  17. context.font="bold 36px impact";
  18. context.fillText("Hello World!",10,50);
  19. context.fillStyle="#90";
  20. context.arc(100,100,30,0,Math.PI*2,false);
  21. context.fill();
  22. }
  23. window.addEventListener("load",Draw,false);
  24. </script>
  25. </head>
  26. <body>
  27. <canvas id="canvas" width="400" height="300">你的浏览器不支持canvas</canvas>
  28. </body>
  29. </html>

是不是再次感觉到了神奇


操作像素

在Canvas中,绘图API还提供了像素级的操作方法,分别是:createImageData()。getImageData()和putImageData()。使用这些方法,可以直接操纵底层的像素数据。

先来体会一下效果

实现方式

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>操作像素</title>
  6. <script type="text/javascript">
  7. function Draw(){
  8. var canvas=document.getElementById("canvas");
  9. var context=canvas.getContext("2d");
  10. var newImg=new Image();
  11. newImg.src="../img/3.jpg";
  12. newImg.οnlοad=function(){
  13. context.drawImage(newImg,0,0,400,300);
  14. context.save();
  15. //获取图像数据
  16. var imageData=context.getImageData(0,0,400,300);
  17. //修改ImageData对象的data数据,处理为反向
  18. for(var i=0,n=imageData.data.length;i<n;i+=4){
  19. //红色部分
  20. imageData.data[i+0]=255-imageData.data[i+0];
  21. //绿色部分
  22. imageData.data[i+1]=255-imageData.data[i+1];
  23. //蓝色部分
  24. imageData.data[i+2]=255-imageData.data[i+2];
  25. }
  26. //绘制该图像数据
  27. context.putImageData(imageData,200,150);
  28. }
  29. }
  30. window.addEventListener("load",Draw,false);
  31. </script>
  32. </head>
  33. <body>
  34. <canvas id="canvas" width="400" height="300">你的浏览器不支持canvas</canvas>
  35. </body>
  36. </html>

注:这个也要放在服务器上运行了,不能直接本地测试

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/107399
推荐阅读
相关标签
  

闽ICP备14008679号