溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何借助CSS mask遮罩顯著優(yōu)化PNG圖片的尺寸

發(fā)布時(shí)間:2021-03-19 09:39:13 來源:億速云 閱讀:222 作者:小新 欄目:web開發(fā)

這篇文章主要介紹如何借助CSS mask遮罩顯著優(yōu)化PNG圖片的尺寸,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

一、無法進(jìn)一步壓縮的PNG圖片

例如有如下所示的PNG圖片(尺寸1/2顯示了),使用頂級(jí)的PNG工具壓縮后還有122K。

如何借助CSS mask遮罩顯著優(yōu)化PNG圖片的尺寸

原圖地址這里: https://image.zhangxinxu.com/image/blog/202005/card.png

PNG尺寸大小示意如下:

如何借助CSS mask遮罩顯著優(yōu)化PNG圖片的尺寸

如果項(xiàng)目就一張這樣的圖還好,要是頁面一下子有很多這么個(gè)尺寸的PNG,那對(duì)首次加載的性能影響就非常明顯了,例如下圖4張卡片圖就有500K。

如何借助CSS mask遮罩顯著優(yōu)化PNG圖片的尺寸

由于卡片的背景也是復(fù)雜圖形,邊邊角角必須要透明,改成JPG格式肯定不行(邊角會(huì)變成純色),就沒有什么可以進(jìn)一步優(yōu)化的方法嗎?

如何借助CSS mask遮罩顯著優(yōu)化PNG圖片的尺寸

有,那就是借助CSS mask遮罩顯著優(yōu)化PNG圖片的尺寸。

二、mask-image與PNG尺寸優(yōu)化

mask-image 遮罩有這樣一個(gè)功能,只有遮罩圖片存在的區(qū)域才顯示,那豈不是如果是一個(gè)邊角透明的任意遮罩圖,就可以讓JPG圖片邊角的白色透明了。

方法可行,demo這里。

具體做法如下。

1. PNG轉(zhuǎn)JPG

先把PNG圖片保持成JPG,圖片質(zhì)量50%就足夠了,如下圖所示:

如何借助CSS mask遮罩顯著優(yōu)化PNG圖片的尺寸

此時(shí),圖片的尺寸可以減小超過50%!

如何借助CSS mask遮罩顯著優(yōu)化PNG圖片的尺寸

2. 根據(jù)PNG輪廓制作純色PNG

PNG圖片之所以尺寸大,就是因?yàn)樯蔬^于豐富,如果我們變成純色,尺寸可以降低100倍不止。

如何借助CSS mask遮罩顯著優(yōu)化PNG圖片的尺寸

此時(shí)的純黑色顏色填充PNG圖片的尺寸不足1K:

如何借助CSS mask遮罩顯著優(yōu)化PNG圖片的尺寸

3. 使用遮罩讓JPG邊角白色透明

假設(shè)JPG卡片圖使用的是 <img> 元素,HTML代碼如下:

<img src="card.jpg">

使用如下的CSS代碼:

img {
    -webkit-mask-image: url(card-mask.png);
    mask-image: url(card-mask.png);
}

就可以有和原始122K大小PNG圖片一樣的效果的了,邊角透明,尺寸還小。

因?yàn)閏ard-mask.png的4個(gè)邊角是透明的,所以card.jpg應(yīng)用card-mask.png作為遮罩圖片后,邊角也跟著透明了。

4. 遮罩圖片的跨域限制

隨著Chrome等瀏覽器的安全升級(jí),遮罩圖片目前有跨域訪問限制,會(huì)有類似下面的錯(cuò)誤提示:

Access to image at &lsquo;https://image.zhangxinxu.com/&hellip;/card-mask.png&rsquo; from origin &lsquo;https://www.zhangxinxu.com&rsquo; has been blocked by CORS policy: No &lsquo;Access-Control-Allow-Origin&rsquo; header is present on the requested resource.

我們可以把純色遮罩圖變成base64格式的,例如:

img {
    -webkit-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZQAAAJ8BAMAAAArFErhAAAAFVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAASAQCkAAAABnRSTlMKPam81se4yTyxAAADc0lEQVR42uzYMUqDQRRG0SSC9R8La0WwFgWX4DqM4Ox/CbZaOGnvJOfs4FaP7+3+OrytY9tNHcY6Hq4m5Was40zK7VjHy+WkfM5T7sc6zqQ8j3Wc5invYx1f85SxkmnJfqxku5Sz8t9h+RgL+5YSJKVISpGUIilFUoqkFP1O2a806Scb7Hj3NFb3+njcb0u9i6ZOUoKkFEkpklIkpUhKkZQiKUVSiqQUSSmSUiSlSEqRlCIpRVKKpBRJKZJSJKVISpGUIilFUoqkFEkpklIkpUhKkZQiKUVSiqQUSSmSUiSlSEqRlCIpRVKKpBRJKZJSJKVISpGUIilFUoqkFEkpklIkpUhKkZQiKUVSiqQUSSmSUiSlSEqRlCIpRVKKpBRJKZJSJKVISpGUIilFUoqkFEkpklIkpUhKkZQiKUVSiqQUSSmSUiSlSEqRlCIpRVKKpBRJKZJSJKVISpGUIilFUoqkFEkpklIkpUhKkZQiKUVSiqQUSSmSUiSlSEqRlCIpRVKKpBRJKZJSJKVISpGUIilFUoqkFEkpklIkpUhKkZQiKUVSiqQUSSmSUiSlSEqRlCIpP+zPsQAAAADAIH/raXQsg0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0S1Yy8nDAMxEIZnE8h63YFJIOeQIlJH/FL/JRjfjA06z6zn6+C/SEhOYeQURk2loHSvUPftKio25R3K5oqdXwhb4BQ+TmHkFEZOYeQURk5h6BRGC3B2DyU9EiWUVGRCyISU0mU8tpMyICP1Svoj9QgduxT1afxpJ6VH6hY6LpTy1HFc9isiYS/oBPlGYwAAAABJRU5ErkJggg==);
}

眼見為實(shí),您可以狠狠地點(diǎn)擊這里: PNG圖片使用CSS遮罩尺寸優(yōu)化demo

JPG格式卡片最終實(shí)現(xiàn)效果如下圖所示(四個(gè)角透明了):

如何借助CSS mask遮罩顯著優(yōu)化PNG圖片的尺寸

三、優(yōu)化后的效果對(duì)比

優(yōu)化前后4張圖大小對(duì)比如下:

如何借助CSS mask遮罩顯著優(yōu)化PNG圖片的尺寸

原來4張圖片支持是458K,優(yōu)化后的圖片尺寸是197K+1K,大小減小了 56.8% !

酷兒~

mask-image 這種移動(dòng)端很早很早就已經(jīng)支持了,這里使用的又是傳統(tǒng)語法,完全沒有任何兼容性問題,大家可以放心使用。

以上是“如何借助CSS mask遮罩顯著優(yōu)化PNG圖片的尺寸”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI