HTML5之图像处理

前端开发   发布日期:2025年07月05日   浏览次数:202

--- 内嵌图像

- drawImage可以绘制图像
context.drawImage(image,dx,dy)
context.drawImage(image,dx,dy,dw,dh)
context.drawImage(image,sx,sy,sw,sh,dx,dy,dw,dh)

- 基本绘制 图片根据尺寸自动截取左上角

image.onload = function(){
  context.drawImage(image,0,0)
}

- 自动调整 调整图片加载尺寸

image.onload = function(){
  context.drawImage(image,0,0,600,400);
}

- 选择一部分区域贴到目标区域

image.onload = function(){
  context.drawImage(image,0,0);
  context.drawImage(image,620,300,300,375,390,10,200,250);
}

---- 绘制像素

- getImageData() // 获取一个Canvas的像素数组
- putImageData() // 将ImageData写入到Canvas中
- createImageData() // 创建一个ImageData

- ImageData对象

  1. context.filStyle = 'navy';
  2. context.fillRect(0,0,1,1);
  3. context.fillStyle = 'teal';
  4. context.fillRect(1,0,1,1);
  5. context.fillStyle = 'lime';
  6. context.fillRect(0,1,1,1);
  7. context.fillStyle = 'yellow';
  8. context.fillRect(1,1,1,1);
  9. ImageData = context.getImageData(0,0,canvas.width,canvas.heigt);
  1. - ImageData.width // 图像宽度
  2. - ImageData.heigth // 图像高度
  3. - ImageData.data // 图像信息
  1. for(var i=0; i<ImageData.data.length; i+= 4)
  2. {
  3. var r = ImageData.data[i];
  4. var g = ImageData.data[i+1];
  5. var b = ImageData.data[i+2];
  6. var a = ImageData.data[i+3];
  7. alert(r+" "+g+" "+b+" "+a);
  8. }

---- 修改像素

- 使用putImageData回写

  1. for (var i=0; i<ImageData.data.length; i+=4)
  2. {
  3. ImageData.data[i] = parseInt(Math.random()*255);
  4. ImageData.data[i+1] = parseInt(Math.random()*255);
  5. ImageData.data[i+2] = parseInt(Math.random()*255);
  6. }
  7. context.putImageData(ImageData,dx,dy,[dirtyX,dirtY,dirtyWidth,dirtyHeight])

---- 创建ImageData

  1. var imagedata = context.createImageData(2,2);
  2. for(var i=0; i<ImageData.data.length; i+=4){
  3. imagedata.data[i] = parseInt(Math.random()*255);
  4. imagedata.data[i+1] = parseInt(Math.random()*255);
  5. imagedata.data[i+2] = parseInt(Math.random()*255);
  6. }
  7. context.putImageData(imagedata,0,0);

---- 操作像素

  1. var image = new Image();
  2. image.src = 'images/yosemite.jpg';
  3. image.onload = function() {
  4. context.drawImage(image,0,0,360,240);
  5. var modified = context.createImag eData(360,240);
  6. var imagedata = context.getImageData(0,0,360,240);
  7. for (var i=0; i<imagedata.data.length; i+=4) {
  8. var rgba = grayLuminosity(
  9. imagedata.data[i+0],
  10. imagedata.data[i+1],
  11. imagedata.data[i+2],
  12. imagedata.data[i+3]
  13. );
  14. modified.data[i+0] = rgba[0];
  15. modified.data[i+1] = rgba[1];
  16. modified.data[i+2] = rgba[2];
  17. modified.data[i+3] = rgba[3];
  18. }
  19. context.putImageDa ta(modified,0,0);
  20. };

----- 滤镜效果代码

  1. var grayLightness = function(r,g,b,a) {
  2. var val = parseInt(
  3. (Math.max(r,g,b)+Math.min(r,g,b))*0.5
  4. );
  5. return [val,val,val,a];
  6. };
  7. var grayLuminosity = function(r,g,b,a) {
  8. var val = parseInt(
  9. (r*0.21)+(g*0.71)+(b*0.07)
  10. );
  11. return [val,val,val,a];
  12. };
  13. var grayAverage = function(r,g,b,a) {
  14. var val = parseInt((r+g+b)/3.0
  15. );
  16. return [val,val,val,a];
  17. };
  18. var sepiaTone = function(r,g,b,a) {
  19. var rS = (r*0.393)+(g*0.769)+(b*0.189);
  20. var gS = (r*0.349)+(g*0.686)+(b*0.168);
  21. var bS = (r*0.272)+(g*0.534)+(b*0.131);
  22. return [
  23. (rS>255) ? 255 : parseInt(rS),
  24. (gS>255) ? 255 : parseInt(gS),
  25. (bS>255) ? 255 : parseInt(bS),a];
  26. };
  27. var invertColor = function(r,g,b,a) {
  28. return [
  29. (255r),
  30. (255g),
  31. (255b),a];
  32. };
  33. var swapChannels = function(r,g,b,a,order) {
  34. var rgba = [r,g,b,a];
  35. return [
  36. rgba[order[0]],
  37. rgba[order[1]],
  38. rgba[order[2]],
  39. rgba[order[3]]];
  40. };
  41. var monoColor = function(r,g,b,a,color) {
  42. return [
  43. color[0],
  44. color[1],
  45. color[2],
  46. 255 ‐(parseInt((r+g+b)/3.0))];
  47. };

----- 合成影像

- 当图形重叠时的绘制方法
context.globalCompositeOperation = 'source-over';

属性:
source-over/source-in/source-out/source-atop
destination-over/destination-in/destination-out/destination-atop
lighter/copy/xor

----- Patterns 复用模式

- createPattern()类似于drawImage()
context.createPattern(image,repetition)

- 复用模式

  1. var cvs = document.createElement("CANVAS");
  2. cvs.width = 20;
  3. cvs.height = 20;
  4. var ctx = cvs.getContext('2d');
  5. ctx.fillStyle = 'lime';
  6. ctx.fillRect(0,0,10,10);
  7. ctx.fillRect(10,10,10,10);
  8. ctx.fillStyle = 'green';
  9. ctx.fillRect(10,0,10,10);
  10. ctx.fillRect(0,10,10,10);
  11. context.fillStyle = context.createPattern(cvs,'repeat');
  12. context.fillRect(0,0,220,220);

 

以上就是HTML5之图像处理的详细内容,更多关于HTML5之图像处理的资料请关注九品源码其它相关文章!