欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript如何對(duì)圖片進(jìn)行黑白化

 更新時(shí)間:2018年04月10日 11:16:39   作者:LGD_Sunday  
這篇文章主要介紹了JS對(duì)圖片進(jìn)行黑白化的實(shí)現(xiàn)代碼,需要的朋友可以參考下

HTML5推出了<canvas>元素,使我們可以通過(guò)js動(dòng)態(tài)的在 <canvas> 這個(gè)區(qū)域之中進(jìn)行圖像的繪制。而我們這次對(duì)圖像的黑白化就是使用js操作<canvas>元素 來(lái)實(shí)現(xiàn)的。

先看一下效果圖

左側(cè)為 img標(biāo)簽 , 右側(cè)為 canvas 元素標(biāo)簽,結(jié)構(gòu)如下

<img src="1.jpg" style="width: 200px; height: 199px"/>
<canvas id="drawing" width="200" height="199" ></canvas>

JS的代碼很簡(jiǎn)單, 只有20多行 ,不過(guò)本著授人與魚(yú)不如授人于漁的態(tài)度,源碼會(huì)貼到最下面,我們先說(shuō)理論。

1、關(guān)于圖片

 大家應(yīng)該都知道,所謂圖片是由一個(gè)個(gè)的像素點(diǎn)組成的,也就是說(shuō)一個(gè) 300*300大小的圖片,共有300*300的像素點(diǎn),而每一個(gè)像素點(diǎn)都是由三原色(red,green,blue)加透明度(alpha)來(lái)組成。所以說(shuō)如果我們希望改變圖像的圖像數(shù)據(jù),其實(shí)就是改變圖像每一個(gè)像素點(diǎn)的數(shù)據(jù)。

2、關(guān)于API

我們通過(guò) var drawing = document.getElementById('drawing'); 這個(gè)方法可以拿到 canvas對(duì)象,canvas對(duì)象提供了 2D、3D兩種繪圖方式,這里我們使用2D繪圖
 使用 context2d = drawing.getContext('2d'); 方法獲得context2d對(duì)象。拿到context2d對(duì)象之后,我們通過(guò)context2d提供的方法getImageData(),來(lái)獲取圖像數(shù)據(jù),getImageData()有4個(gè)參數(shù),分別表示畫(huà)面區(qū)域的 x 和 y 坐標(biāo)以及該區(qū)域的像素寬度和高度 var imagedata = context2d.getImageData(0, 0, image.width, image.height); 

 ImageData 對(duì)象都有三個(gè)屬性:width、height 和
data。其中 data 屬性是一個(gè)數(shù)組,保存著圖像中每一個(gè)像素的數(shù)據(jù)。并通過(guò),red,green,blue,alpha來(lái)表示。那么我們?nèi)绻胍淖儓D像的圖像數(shù)據(jù),就需要改變 imagedata的data屬性數(shù)據(jù),改變 red,green,blue,alpha 的值。

這里是源代碼

function drawImageData () {
      var context2d = null;
      if(drawing.getContext) {
        context2d = drawing.getContext('2d');
      }
      if (context2d == null) {
        return;
      }
      var image = document.images[0];
      context2d.drawImage(image, 0 , 0);
      var imagedata = context2d.getImageData(0, 0, image.width, image.height);
      var data = imagedata.data;
      console.log('data: ' + data);
      var i,len,red,green,blue,alpha,average;
      for (i = 0 , len = data.length; i < len; i+=4) {
        red = data[i];
        green = data[i + 1];
        blue = data[i + 2];
        alpha = data[i + 3];
        average = Math.floor((red + green + blue) / 3);
        data[i] = average; 
        data[i+1] = average; 
        data[i+2] = average;
      }
      imagedata.data = data;
      context2d.putImageData(imagedata, 0, 0);
    }

總結(jié)

以上所述是小編給大家介紹JavaScript如何對(duì)圖片進(jìn)行黑白化,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • javascript自執(zhí)行函數(shù)之偽命名空間封裝法

    javascript自執(zhí)行函數(shù)之偽命名空間封裝法

    比較之后,我們可以發(fā)現(xiàn),第二方法更加的直觀,易于理解。但是少了封裝過(guò)程,代碼完全裸露在外。
    2010-12-12
  • 微信小程序MUI側(cè)滑導(dǎo)航菜單示例(Popup彈出式,左側(cè)不動(dòng),右側(cè)滑動(dòng))

    微信小程序MUI側(cè)滑導(dǎo)航菜單示例(Popup彈出式,左側(cè)不動(dòng),右側(cè)滑動(dòng))

    這篇文章主要介紹了微信小程序MUI側(cè)滑導(dǎo)航菜單,結(jié)合實(shí)例形式分析了微信小程序Popup彈出式,左側(cè)不動(dòng),右側(cè)滑動(dòng)菜單相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-01-01
  • JS小功能(onmouseover實(shí)現(xiàn)選擇月份)實(shí)例代碼

    JS小功能(onmouseover實(shí)現(xiàn)選擇月份)實(shí)例代碼

    這篇文章主要介紹了onmouseover實(shí)現(xiàn)選擇月份實(shí)例代碼,有需要的朋友可以參考一下
    2013-11-11
  • 原生Javascript插件開(kāi)發(fā)實(shí)踐

    原生Javascript插件開(kāi)發(fā)實(shí)踐

    本文主要介紹了原生Javascript插件開(kāi)發(fā)實(shí)踐思路與代碼,具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • 最新評(píng)論