中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何利用CSS處理圖片轉為像素風

發布時間:2022-03-22 11:06:31 來源:億速云 閱讀:271 作者:小新 欄目:web開發

小編給大家分享一下如何利用CSS處理圖片轉為像素風,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

什么是像素風?

像素風是一種以固定大小純色像素方塊作為基本單元,進行創作,包含但不限于繪畫建筑游戲更各個領域的一種美術風格。
其中最讓人耳熟能詳的,當然是早期電子游戲的像素畫面啦~

如何利用CSS處理圖片轉為像素風

[早期紅白機上"馬里奧"的像素形象]

當然,早期電子游戲采用像素風,實際上是一種歷史的無奈,硬件條件的限制,讓游戲開發者不得不選擇這種變現力強性能開銷低的美術風格。

不過,時至今日像素風在各個領域依然潮流,則被賦予了更多審美復古上的意義。

思路分析

先看看本次要處理的“愛心圖”的原圖:

如何利用CSS處理圖片轉為像素風
[愛心圖]

要將一張這樣的圖片變成像素,我腦海里首先蹦出了第一個思路:

思路一:通過canvas切割和填充

使用canvas將圖片切割成N*N塊,然后每塊區域單獨計算取色彩中值,并將其填充為實色,沒錯,這個思路無疑是可以很快且靈活的解決問題的。
但這樣一來,沒使用到CSS,同事阿洋的第一次約會豈不是就完全泡湯了?
??
不行不行!我得換個思路,用CSS來實現!

思路二:大半徑高斯模糊濾鏡來取中值

主體思路如下:

  • 將圖片分成N個div,每個div都持有圖片的一部分。

  • 每個div都通過css-filter來進行一次blur(高斯模糊),視覺上達到取中值并填充div的效果。

按這個思路,其實只有一個難點,如何讓每個div都持有圖片的一部分?

呵,這可難不倒我那顆幫助同事大心臟

實施

其實不難:

  • 首先,我們用8*8將一個div分成64份,毫無疑問的grid布局。

如何利用CSS處理圖片轉為像素風

代碼:

<style>
    .mask-group {
      width: 128px;
      height: 128px;
      display: grid;
      grid-template-columns: repeat(8,1fr);
      grid-template-rows: repeat(8,1fr);
    }
</style>
<script>
  const el = document.querySelector('.mask-group')
    for(let i = 0; i< 64; i++) {
      const itemEl = document.createElement('div')
      itemEl.className = 'mask-item'
      el.appendChild(itemEl)
    }
  }
</script>
  • 然后我們給每個.mask-item 元素設置一個心形背景

然后效果就變成了這樣,因為每一張的背景都是從左上角開始的,因此肯定不符合預期。

如何利用CSS處理圖片轉為像素風

接下來:我們需要在js的遍歷中插入這么一句:

itemEl.style.backgroundPosition = `-${Math.floor(i%8) * 16}px -${Math.floor(i/8) * 16}px `

這行代碼的作用,是給每一個.mask-item元素單獨賦予一個background-position樣式,通過計算讓所有.mask-item元素的背景圖的左上角都重疊到了一個坐標點上

效果如圖:

如何利用CSS處理圖片轉為像素風

3. 增加間隔和高斯模糊 按照設想,我們只需要給div加上間隔,再給上高斯模糊,就能達到效果了。 于是代碼如下:

.mask-group {
  /* 以下為新增 */
  grid-row-gap: 2px;
  grid-column-gap: 2px;
}
.mask-item {
  /* 以下為新增 */
  filter: blur(8px)
}

但是效果卻:

如何利用CSS處理圖片轉為像素風

到底是哪里出了問題?
高斯模糊居然會作用到inner-box以外的區域!!

  1. mask-image 限定可視區域

沒辦法,為了限定高斯模糊的效果區域,我只能通過mask-image了。
先弄一張16*16像素的純黑all-black.png文件。
代碼如下:

.mask-item {
  /* 以下為新增 */
  -webkit-mask-image: url('./all-black.png');
  mask-image: url('./all-black.png');  
}

效果圖:

如何利用CSS處理圖片轉為像素風

嘿嘿,現在就像那么回事了,不過因為被高斯的原因,顏色淡了不少,沒事,微調一下即可。

  1. 調整顏色

代碼如下:

.mask-item {
  /* 以下為更改 */
  filter: blur(8px) contrast(400%) saturate(400%);
}

如何利用CSS處理圖片轉為像素風

以上是“如何利用CSS處理圖片轉為像素風”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

css
AI

木里| 忻州市| 城口县| 卓资县| 奉化市| 醴陵市| 华宁县| 庆阳市| 姚安县| 庄浪县| 龙州县| 招远市| 醴陵市| 望城县| 襄汾县| 铜梁县| 上虞市| 凉山| 嘉祥县| 嘉黎县| 玉山县| 海晏县| 固阳县| 璧山县| 连南| 宿州市| 厦门市| 滕州市| 泸定县| 大邑县| 南华县| 思茅市| 万山特区| 汪清县| 北辰区| 铜梁县| 城市| 白城市| 凭祥市| 茌平县| 吉林省|