您好,登錄后才能下訂單哦!
小編給大家分享一下如何利用CSS處理圖片轉為像素風,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
像素風
是一種以固定大小純色像素方塊
作為基本單元,進行創作,包含但不限于繪畫
、建筑
、游戲
更各個領域的一種美術風格。
其中最讓人耳熟能詳的,當然是早期電子游戲
的像素畫面啦~
[早期紅白機上"馬里奧"的像素形象]
當然,早期電子游戲采用像素風
,實際上是一種歷史的無奈,硬件條件的限制,讓游戲開發者不得不選擇這種變現力強
,性能開銷
低的美術風格。
不過,時至今日
像素風在各個領域依然潮流,則被賦予了更多審美
和復古
上的意義。
先看看本次要處理的“愛心圖”的原圖:
[愛心圖]
要將一張這樣的圖片變成像素,我腦海里首先蹦出了第一個思路:
使用canvas將圖片切割成N*N塊,然后每塊區域單獨計算取色彩中值,并將其填充為實色,沒錯,這個思路無疑是可以很快且靈活的解決問題的。
但這樣一來,沒使用到CSS,同事阿洋的第一次約會
豈不是就完全泡湯了?
??
不行不行!我得換個思路,用CSS來實現!
主體思路如下:
將圖片分成N個div,每個div都持有圖片的一部分。
每個div都通過css-filter來進行一次blur(高斯模糊)
,視覺上達到取中值并填充div
的效果。
按這個思路,其實只有一個難點,如何讓每個div都持有圖片的一部分?
呵,這可難不倒我那顆幫助同事大心臟
。
其實不難:
首先,我們用8*8將一個div分成64份,毫無疑問的grid布局。
代碼:
<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 元素設置一個心形背景
然后效果就變成了這樣
,因為每一張的背景都是從左上角開始的,因此肯定不符合預期。
接下來:我們需要在js的遍歷中插入這么一句:
itemEl.style.backgroundPosition = `-${Math.floor(i%8) * 16}px -${Math.floor(i/8) * 16}px `
這行代碼的作用,是給每一個.mask-item元素單獨賦予一個background-position
樣式,通過計算讓所有.mask-item元素的背景圖的左上角都重疊到了一個坐標點上
。
效果如圖:
3. 增加間隔和高斯模糊
按照設想,我們只需要給div加上間隔
,再給上高斯模糊
,就能達到效果了。
于是代碼如下:
.mask-group { /* 以下為新增 */ grid-row-gap: 2px; grid-column-gap: 2px; } .mask-item { /* 以下為新增 */ filter: blur(8px) }
但是效果卻:
到底是哪里出了問題?高斯模糊
居然會作用到inner-box
以外的區域!!
mask-image 限定可視區域
沒辦法,為了限定高斯模糊的效果區域,我只能通過mask-image了。
先弄一張16*16像素的純黑all-black.png文件。
代碼如下:
.mask-item { /* 以下為新增 */ -webkit-mask-image: url('./all-black.png'); mask-image: url('./all-black.png'); }
效果圖:
嘿嘿,現在就像那么回事了,不過因為被高斯
的原因,顏色淡了不少,沒事,微調一下即可。
調整顏色
代碼如下:
.mask-item { /* 以下為更改 */ filter: blur(8px) contrast(400%) saturate(400%); }
以上是“如何利用CSS處理圖片轉為像素風”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。