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

JS實(shí)現(xiàn)彩色圖片轉(zhuǎn)換為黑白圖片的3種方法

 更新時(shí)間:2024年09月10日 10:46:46   作者:代碼里的小貓咪  
本文主要介紹了JS實(shí)現(xiàn)彩色圖片轉(zhuǎn)換為黑白圖片的3種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1. 使用 Canvas

研究 canvas 時(shí)發(fā)現(xiàn)一個(gè)有趣的現(xiàn)象——將彩色圖片巧妙地轉(zhuǎn)換為黑白圖片。以下是實(shí)現(xiàn)這一功能的簡(jiǎn)潔代碼示例:

<div style="display: flex">
  <img src="./panda.jpeg" />
  <button onclick="change()">轉(zhuǎn)換</button>
  <canvas width="358" height="362"></canvas>
</div>

大致步驟為:

1. 把 img 元素畫到 canvas 上

2. 獲取畫布某個(gè)區(qū)域的圖像信息,返回圖片信息對(duì)象

包括 data-類型化數(shù)組(紅,綠,藍(lán),alpha),圖片的寬高等數(shù)據(jù)

3. 重新設(shè)置圖像數(shù)據(jù)到畫布

<script>
  function change() {
    const img = document.querySelector("img");
    const cvs = document.querySelector("canvas");
    // 獲取繪圖表面提供 2D 渲染上下文
    const ctx = cvs.getContext("2d");
    // 把img元素畫到canvas畫布上
    ctx.drawImage(img, 0, 0);

    // 獲取畫布某個(gè)區(qū)域的圖像信息(整個(gè)圖片區(qū)域)
    const imageData = ctx.getImageData(0, 0, img.width, img.height);
    // imageData:圖片信息對(duì)象
    for (let i = 0; i < imageData.data.length; i += 4) {
      // 將灰度值重新賦值給rgba
      const r = imageData.data[i];
      const g = imageData.data[i + 1];
      const b = imageData.data[i + 2];
      const avg = (r + g + b) / 3;
      imageData.data[i] =
      imageData.data[i + 1] =
      imageData.data[i + 2] =
      avg;
    }
    // 重新設(shè)置圖像數(shù)據(jù)到畫布
    ctx.putImageData(imageData, 0, 0);
  }
  </script>

實(shí)現(xiàn)的效果如下:

注意:需要將 canvas 的 width 和 height 設(shè)置成圖片的真實(shí)大小,否則可能出現(xiàn)轉(zhuǎn)換后圖片尺寸不一致。

黑白圖片的原理

1. 畫布中的一個(gè)圖像是由多個(gè)像素點(diǎn)組成,每個(gè)像素點(diǎn)有四個(gè)數(shù)據(jù):紅、綠、藍(lán)、alpha。

2. 將圖像變成黑白,只需要將圖像的每一個(gè)像素點(diǎn)設(shè)置成當(dāng)前紅、綠、藍(lán)值的平均數(shù)即可。

2. 使用 CSS 濾鏡

如果只是希望在頁面上顯示灰度圖片,而不需要在 JavaScript 中處理圖片數(shù)據(jù),那么可以直接使用 CSS 的 filter 屬性來實(shí)現(xiàn)。代碼如下:

<div>
  <img src="./panda.jpeg" />
  <button onclick="change()">點(diǎn)擊</button>
</div>
<script>
  const change = () => {
    const img = document.querySelector('img');
    img.style.filter = 'grayscale(100%)'
  }
</script>

這種方法不會(huì)改變圖片的原始數(shù)據(jù),只是改變了其在頁面上的顯示方式。

效果如下:

3. 使用第三方庫

比如 Three.js 或 Pixi.js,這些庫提供了自己的方法來處理圖像數(shù)據(jù),包括灰度化。如果需要更加精準(zhǔn)的轉(zhuǎn)換操作,可以參考其官方文檔。

到此這篇關(guān)于JS實(shí)現(xiàn)彩色圖片轉(zhuǎn)換為黑白圖片的3種方法的文章就介紹到這了,更多相關(guān)JS 彩色圖片轉(zhuǎn)換黑白圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于JS實(shí)現(xiàn)密碼框(password)中顯示文字提示功能代碼

    基于JS實(shí)現(xiàn)密碼框(password)中顯示文字提示功能代碼

    這篇文章主要介紹了實(shí)現(xiàn)密碼框(password)中顯示文字提示功能代碼,在項(xiàng)目開發(fā)中經(jīng)常會(huì)用到,需要的朋友可以參考下
    2016-05-05
  • JS使用onerror捕獲異常示例

    JS使用onerror捕獲異常示例

    這篇文章主要介紹了JS使用onerror捕獲異常的方法,結(jié)合實(shí)例形式分析了javascript基于onerror事件處理器捕獲異常的具體流程與相關(guān)操作技巧,需要的朋友可以參考下
    2016-08-08
  • 簡(jiǎn)單封裝js的dom查詢實(shí)例代碼

    簡(jiǎn)單封裝js的dom查詢實(shí)例代碼

    下面小編就為大家?guī)硪黄?jiǎn)單封裝js的dom查詢實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07
  • innerHTML 和 getElementsByName 在IE下面的bug 的解決

    innerHTML 和 getElementsByName 在IE下面的bug 的解決

    innerHTML 真的一個(gè)麻煩的東西。IE 和 firefox 對(duì)dom 處理的方式不是很一樣。IE 對(duì)動(dòng)態(tài)加載的很多dom 不支持動(dòng)態(tài)更新。
    2010-04-04
  • readonly和disabled的區(qū)別

    readonly和disabled的區(qū)別

    要慎用readonly和disabled, 指定了disabled的表單,在submit時(shí),不會(huì)把它的值傳出去, 如下所示,有兩個(gè)text,一個(gè)是readonly一個(gè)是disabled,submit后,只能發(fā)送那個(gè)不是disabled的,注意地址欄的值. 要保存到本地,因?yàn)閟ubmit了,不然,看不到效果.
    2008-04-04
  • jfreechart插件將數(shù)據(jù)展示成餅狀圖、柱狀圖和折線圖

    jfreechart插件將數(shù)據(jù)展示成餅狀圖、柱狀圖和折線圖

    閑暇之余,學(xué)習(xí)了一下jfreechart圖表生成,結(jié)合大蝦們的著作,小弟進(jìn)行了系統(tǒng)的總結(jié),真是獲益匪淺,這里推薦給小伙伴們,有需要的朋友可以參考下。
    2015-04-04
  • js拖拽功能實(shí)現(xiàn)代碼解析

    js拖拽功能實(shí)現(xiàn)代碼解析

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)拖拽功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 21個(gè)值得收藏的Javascript技巧

    21個(gè)值得收藏的Javascript技巧

    在本文中列出了21個(gè)值得收藏的Javascript技巧,在實(shí)際工作中,如果能適當(dāng)運(yùn)用,則大大提高工作效率
    2014-02-02
  • 微信小程序 slot踩坑的解決

    微信小程序 slot踩坑的解決

    這篇文章主要介紹了微信小程序 slot踩坑的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • JavaScript實(shí)現(xiàn)讀取上傳視頻文件的時(shí)長(zhǎng)和第一幀畫面過程講解

    JavaScript實(shí)現(xiàn)讀取上傳視頻文件的時(shí)長(zhǎng)和第一幀畫面過程講解

    當(dāng)我們做一個(gè)后臺(tái)系統(tǒng)的音視頻管理模塊時(shí),通常要限制文件的大小和類型,這篇文章主要介紹了JavaScript實(shí)現(xiàn)讀取上傳視頻文件的時(shí)長(zhǎng)和第一幀畫面過程,需要詳細(xì)了解實(shí)現(xiàn)方法可以參考下文
    2023-05-05

最新評(píng)論