canvas绘制灰度图片

一幅完整的图像,是由红色、绿色、蓝色三个通道组成的。红色、绿色、蓝色三个通道的缩览图都是以灰度显示的。用不同的灰度色阶来表示" 红,绿,蓝"在图像中的比重。通道中的纯白,代表了该色光在此处为最高亮度,亮度级别是255。

灰度化方法:

        1.浮点算法:Gray = R*0.299 + G*0.587 + B*0.114  

        2.整数方法:Gray = (R*299 + G*587 + B*114 + 500) / 1000 

        3.移位方法:Gray =(R*28+G*151+B*77)>>8;   

        4.平均值法:Gray=(R+G+B)/3;   

        5.仅取绿色:Gray=G;

        只要将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的RGB(Gray,Gray,Gray)就完成灰度化了;

代码如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

<!DOCTYPE html>

<html>

 <head>

 <meta charset="UTF-8">

 <title>ImgBase</title>

 <style type="text/css">

 .scream{

 width:400px;

 height:300px;

 position: absolute;

 top:60px;

 border: 1px solid;

 }

 #canvas{

 position: absolute;

 top:60px;

 left:500px;

 border: 1px dashed;

 }

 </style>

 </head>

 <body>

 <input type="file" onchange="loadImg()"/>

 <input type="button" value="灰度化" onclick="Convert256toGray()"/>

 <br/><br/>

 <div class="scream">

 <img id="scream" width="400px" height="300px" alt="Image preview...">

 </div>

 <canvas id="canvas" width="400px;" height="300px;">

 your browser does not support canvas!

 </canvas>

 <script>

 function Convert256toGray(){

 var c=document.getElementById("canvas");

 var ctx=c.getContext("2d");

 var imgData = ctx.getImageData(0,0,c_w,c_h);

 for (var i=0;i<imgData.data.length;i+=4)

  {

  var R = imgData.data[i]; //R(0-255)

  var G = imgData.data[i+1]; //G(0-255)

  var B = imgData.data[i+2]; //G(0-255)

  var Alpha = imgData.data[i+3]; //Alpha(0-255)

  //浮点算法

  var gray = R*0.299 + G*0.587 + B*0.114;

  //整数算法

//  var gray = (R*299 + G*587 + B*114 + 500) / 1000; 

  //移位算法

//  var gray =(R*76+G*151+B*28)>>8;

  //平均值算法

//   var gray = (R+G+B)/3;

  //仅取绿色

//  var gray=G;

   imgData.data[i] = gray;

   imgData.data[i+1] = gray;

   imgData.data[i+2] = gray;

   imgData.data[i+3] = Alpha;

  }

 ctx.putImageData(imgData,0,0);

 }

 </script>

 <!--base-->

 <script>

 //canvas图像的宽高

 var c_w = 400; var c_h = 300;

 //加载img图像

 function loadImg(){

 var img = document.getElementById("scream");

 var file = document.querySelector('input[type=file]').files[0];

 if(!/image\/\w+/.test(file.type)){

   alert("文件必须为图片!");

   return false;

  }

 var reader = new FileReader();

 reader.addEventListener("load", function () {

  img.src = reader.result;

 }, false);

 if(file) {

  reader.readAsDataURL(file);

  loadCanvas();

 }

 }

 //加载canvas图像

 function loadCanvas(){

 var c=document.getElementById("canvas");

 var ctx=c.getContext("2d");

 var img = document.getElementById("scream");

 img.onload = function() {

  ctx.drawImage(img,0,0,c_w,c_h);

 }

 }

 </script>

 </body>

</html>

猜你喜欢

转载自blog.csdn.net/weixin_41584401/article/details/89875057
今日推荐