canvas基础—04像素延伸

淡淡的烟草味﹌ 2022-03-19 03:08 381阅读 0赞

1.像素坐标

20190217173150747.png

demo.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>canvas学习</title>
  6. <style>
  7. body{background: black;color:white;font-size:30px;}
  8. #c1{background: white}
  9. span{color: white}
  10. </style>
  11. <script type="text/javascript">
  12. window.onload = function(){
  13. var oC = document.getElementById('c1')
  14. var oGC = oC.getContext('2d')
  15. oGC.fillRect(0,0,100,100)
  16. var oImg = oGC.getImageData(0,0,100,100)
  17. alert(getXY(oImg,3,5)) //x列是4,y行是6 打印(0,0,0,255)
  18. //将这一行颜色设置成红色
  19. for(var i=0;i<oImg.width;i++){
  20. setXY(oImg,i,5,[255,0,0,255])
  21. }
  22. oGC.putImageData(oImg,100,100)
  23. // 返回该像素点的颜色
  24. function getXY(obj,x,y) {
  25. var w =obj.width //100
  26. var h = obj.height //100
  27. var d = obj.data
  28. var color = []
  29. color[0] = d[4*(y*w+x)] //4(y*w+x)的结果是算出这一行以前的所有值,假设是一个10*10就好理解
  30. color[1] = d[4*(y*w+x)+1]
  31. color[2] = d[4*(y*w+x)+2]
  32. color[3] = d[4*(y*w+x)+3]
  33. return color
  34. }
  35. function setXY(obj,x,y,color){
  36. var w =obj.width //100
  37. var h = obj.height //100
  38. var d = obj.data
  39. var color = []
  40. d[4*(y*w+x)] = color[0] //4(y*w+x)的结果是算出这一行以前的所有值,假设是一个10*10就好理解
  41. d[4*(y*w+x)+1] = color[1]
  42. d[4*(y*w+x)+2] = color[2]
  43. d[4*(y*w+x)+3] = color[3]
  44. }
  45. }
  46. </script>
  47. </head>
  48. <body>
  49. <canvas id="c1" width="400" height="400">
  50. <span>不支持canvas浏览器</span>
  51. </canvas>
  52. </body>
  53. </html>

效果

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW9qc3Vu_size_16_color_FFFFFF_t_70

图示

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW9qc3Vu_size_16_color_FFFFFF_t_70 1

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW9qc3Vu_size_16_color_FFFFFF_t_70 2

2.例子之反色

20190217173210536.png

注意:必须是同源的,意思不能用一个网上图片的连接

demo.html

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>canvas学习</title>
  6. <style>
  7. body{background: black;color:white;font-size:30px;}
  8. #c1{background: white}
  9. span{color: white}
  10. </style>
  11. <script type="text/javascript">
  12. window.onload = function(){
  13. var oC = document.getElementById('c1')
  14. var oGC = oC.getContext('2d')
  15. var yImg = new Image()
  16. yImg.onload = function(){
  17. draw(this)
  18. }
  19. yImg.src = '1.png'
  20. function draw(obj) {
  21. oC.width = obj.width
  22. oGC.drawImage(obj,0,0) // drawImage(oImg,x,y,w,h)
  23. var oImg = oGC.getImageData(0,0,obj.width,obj.height)//获取图像数据(x,y,w,h)
  24. var w = oImg.width //图片一行的个数
  25. var h = oImg.height //图片一列的个数
  26. // 制作反色效果
  27. for(var i=0;i<h;i++){//每一行
  28. for(var j=0;j<w;j++){//每一列
  29. var result = []
  30. var color = getXY(oImg,j,i)//(x(j),y(i))
  31. result[0] = 255 - color[0]
  32. result[1] = 255 - color[1]
  33. result[2] = 255 - color[2]
  34. result[3] = 255
  35. setXY(oImg,j,i,result)
  36. // oGC.putImageData(oImg,100,obj.height)
  37. }
  38. }
  39. oGC.putImageData(oImg,0,obj.height)
  40. }
  41. // 返回该像素点的颜色
  42. function getXY(obj,x,y) {
  43. var w =obj.width //100
  44. var h = obj.height //100
  45. var d = obj.data
  46. var color = []
  47. color[0] = d[4*(y*w+x)] //4(y*w+x)的结果是算出这一行以前的所有值,假设是一个10*10就好理解
  48. color[1] = d[4*(y*w+x)+1]
  49. color[2] = d[4*(y*w+x)+2]
  50. color[3] = d[4*(y*w+x)+3]
  51. return color
  52. }
  53. function setXY(obj,x,y,color){
  54. var w =obj.width //100
  55. var h = obj.height //100
  56. var d = obj.data
  57. d[4*(y*w+x)] = color[0] //4(y*w+x)的结果是算出这一行以前的所有值,假设是一个10*10就好理解
  58. d[4*(y*w+x)+1] = color[1]
  59. d[4*(y*w+x)+2] = color[2]
  60. d[4*(y*w+x)+3] = color[3]
  61. }
  62. }
  63. </script>
  64. </head>
  65. <body>
  66. <canvas id="c1" width="1000" height="1000">
  67. <span>不支持canvas浏览器</span>
  68. </canvas>
  69. </body>
  70. </html>

注意,建议用火狐浏览器,其他浏览器会出去跨域问题

效果

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW9qc3Vu_size_16_color_FFFFFF_t_70 3

3.例子之倒影

demo.html

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>canvas学习</title>
  6. <style>
  7. body{background: black;color:white;font-size:30px;}
  8. #c1{background: white}
  9. span{color: white}
  10. </style>
  11. <script type="text/javascript">
  12. window.onload = function(){
  13. var oC = document.getElementById('c1')
  14. var oGC = oC.getContext('2d')
  15. var yImg = new Image()
  16. yImg.onload = function(){
  17. draw(this)
  18. }
  19. yImg.src = '1.png'
  20. function draw(obj) {
  21. oC.width = obj.width
  22. oGC.drawImage(obj,0,0) // drawImage(oImg,x,y,w,h)
  23. var oImg = oGC.getImageData(0,0,obj.width,obj.height)//获取图像数据(x,y,w,h)
  24. var w = oImg.width //图片一行的个数
  25. var h = oImg.height //图片一列的个数
  26. //***
  27. var newImage = oGC.createImageData(obj.width,obj.height)//createImageData(w,h)生成新的像素矩阵
  28. // 制作倒影效果
  29. for(var i=0;i<h;i++){//每一行
  30. for(var j=0;j<w;j++){//每一列
  31. var result = []
  32. var color = getXY(oImg,j,i)//(x(j),y(i))
  33. result[0] = 255 - color[0]
  34. result[1] = 255 - color[1]
  35. result[2] = 255 - color[2]
  36. result[3] = 255
  37. setXY(newImage,j,h-i,result) //***
  38. }
  39. }
  40. oGC.putImageData(newImage,0,obj.height) //***
  41. }
  42. // 返回该像素点的颜色
  43. function getXY(obj,x,y) {
  44. var w =obj.width //100
  45. var h = obj.height //100
  46. var d = obj.data
  47. var color = []
  48. color[0] = d[4*(y*w+x)] //4(y*w+x)的结果是算出这一行以前的所有值,假设是一个10*10就好理解
  49. color[1] = d[4*(y*w+x)+1]
  50. color[2] = d[4*(y*w+x)+2]
  51. color[3] = d[4*(y*w+x)+3]
  52. return color
  53. }
  54. function setXY(obj,x,y,color){
  55. var w =obj.width //100
  56. var h = obj.height //100
  57. var d = obj.data
  58. d[4*(y*w+x)] = color[0] //4(y*w+x)的结果是算出这一行以前的所有值,假设是一个10*10就好理解
  59. d[4*(y*w+x)+1] = color[1]
  60. d[4*(y*w+x)+2] = color[2]
  61. d[4*(y*w+x)+3] = color[3]
  62. }
  63. }
  64. </script>
  65. </head>
  66. <body>
  67. <canvas id="c1" width="1000" height="1000">
  68. <span>不支持canvas浏览器</span>
  69. </canvas>
  70. </body>
  71. </html>

效果

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW9qc3Vu_size_16_color_FFFFFF_t_70 4

4.例子之渐变透明

代码和上面的一样,只需要修改下面一句话

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW9qc3Vu_size_16_color_FFFFFF_t_70 5

发表评论

表情:
评论列表 (有 0 条评论,381人围观)

还没有评论,来说两句吧...

相关阅读