<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【CSS】1175- 使用 CSS 將愛心圖片變成“偽像素風”

          共 1017字,需瀏覽 3分鐘

           ·

          2021-12-19 03:07

          產(chǎn)品小妹妹對同事阿洋說:“如果你能用CSS把一張愛心圖片變成像素風,我今天就答應跟你約會?!?/p>

          我拍了拍阿洋的肩膀,意味深長地說:“放心,學長會幫你的?!?/p>

          什么是像素風?

          像素風是一種以固定大小純色像素方塊作為基本單元,進行創(chuàng)作,包含但不限于繪畫、建筑、游戲更各個領(lǐng)域的一種美術(shù)風格。
          其中最讓人耳熟能詳?shù)模斎皇窃缙?code style="font-size: 14px;border-radius: 4px;font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(155, 110, 35);background-color: rgb(255, 245, 227);padding: 3px;margin: 3px;">電子游戲的像素畫面啦~


          [早期紅白機上"馬里奧"的像素形象]
          當然,早期電子游戲采用像素風,實際上是一種歷史的無奈,硬件條件的限制,讓游戲開發(fā)者不得不選擇這種變現(xiàn)力強,性能開銷低的美術(shù)風格。

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

          思路分析

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


          [愛心圖]

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

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

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

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

          主體思路如下:

          1. 將圖片分成N個div,每個div都持有圖片的一部分。
          2. 每個div都通過css-filter來進行一次blur(高斯模糊),視覺上達到取中值并填充div的效果。

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

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

          實施

          其實不難:

          1. 首先,我們用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;?i64
          ;?i++)?{
          ??????const?itemEl?=?document.createElement('div')
          ??????itemEl.className?=?'mask-item'
          ??????el.appendChild(itemEl)
          ????}
          ??}
          script>
          復制代碼
          1. 然后我們給每個.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)
          }
          復制代碼

          但是效果卻:

          step4.png

          到底是哪里出了問題?
          高斯模糊居然會作用到inner-box以外的區(qū)域?。?/p>

          1. mask-image 限定可視區(qū)域

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

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

          效果圖:

          px.png

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

          1. 調(diào)整顏色

          代碼如下:

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


          大功告成?。?/strong>

          故事結(jié)局

          萬萬沒想到,同事阿洋還是沒能完成和產(chǎn)品妹妹小美的約會。
          原因居然是:
          產(chǎn)品妹妹覺得我寫代碼的樣子過于靚仔,非要和我約會!


          --全劇終--


          關(guān)于本文

          來源:春哥的夢想是摸魚

          https://juejin.cn/post/7034010492830121991


          1. JavaScript 重溫系列(22篇全)
          2. ECMAScript 重溫系列(10篇全)
          3. JavaScript設計模式 重溫系列(9篇全)
          4.?正則 / 框架 / 算法等 重溫系列(16篇全)
          5.?Webpack4 入門(上)||?Webpack4 入門(下)
          6.?MobX 入門(上)?||??MobX 入門(下)
          7. 120+篇原創(chuàng)系列匯總

          回復“加群”與大佬們一起交流學習~

          點擊“閱讀原文”查看 130+ 篇原創(chuàng)文章

          瀏覽 42
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产操P 国产操网 | 欧美夜夜操 | 欧美高清精品成人在线 | 国产av午夜福利 国产操逼免费视频 | 国产日韩高清在线观看 |