這篇文章主要介紹如何借助CSS mask遮罩顯著優(yōu)化PNG圖片的尺寸,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
一、無法進一步壓縮的PNG圖片
例如有如下所示的PNG圖片(尺寸1/2顯示了),使用頂級的PNG工具壓縮后還有122K。
原圖地址這里: https://image.zhangxinxu.com/image/blog/202005/card.png
PNG尺寸大小示意如下:
如果項目就一張這樣的圖還好,要是頁面一下子有很多這么個尺寸的PNG,那對首次加載的性能影響就非常明顯了,例如下圖4張卡片圖就有500K。
由于卡片的背景也是復雜圖形,邊邊角角必須要透明,改成JPG格式肯定不行(邊角會變成純色),就沒有什么可以進一步優(yōu)化的方法嗎?
有,那就是借助CSS mask遮罩顯著優(yōu)化PNG圖片的尺寸。
二、mask-image與PNG尺寸優(yōu)化
mask-image
遮罩有這樣一個功能,只有遮罩圖片存在的區(qū)域才顯示,那豈不是如果是一個邊角透明的任意遮罩圖,就可以讓JPG圖片邊角的白色透明了。
方法可行,demo這里。
具體做法如下。
1. PNG轉(zhuǎn)JPG
先把PNG圖片保持成JPG,圖片質(zhì)量50%就足夠了,如下圖所示:
此時,圖片的尺寸可以減小超過50%!
2. 根據(jù)PNG輪廓制作純色PNG
PNG圖片之所以尺寸大,就是因為色彩過于豐富,如果我們變成純色,尺寸可以降低100倍不止。
此時的純黑色顏色填充PNG圖片的尺寸不足1K:
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圖片一樣的效果的了,邊角透明,尺寸還小。
因為card-mask.png的4個邊角是透明的,所以card.jpg應(yīng)用card-mask.png作為遮罩圖片后,邊角也跟著透明了。
4. 遮罩圖片的跨域限制
隨著Chrome等瀏覽器的安全升級,遮罩圖片目前有跨域訪問限制,會有類似下面的錯誤提示:
Access to image at ‘https://image.zhangxinxu.com/…/card-mask.png’ from origin ‘https://www.zhangxinxu.com’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ 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==);
}
眼見為實,您可以狠狠地點擊這里: PNG圖片使用CSS遮罩尺寸優(yōu)化demo
JPG格式卡片最終實現(xiàn)效果如下圖所示(四個角透明了):
三、優(yōu)化后的效果對比
優(yōu)化前后4張圖大小對比如下:
原來4張圖片支持是458K,優(yōu)化后的圖片尺寸是197K+1K,大小減小了56.8% !
酷兒~
mask-image
這種移動端很早很早就已經(jīng)支持了,這里使用的又是傳統(tǒng)語法,完全沒有任何兼容性問題,大家可以放心使用。
以上是“如何借助CSS mask遮罩顯著優(yōu)化PNG圖片的尺寸”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
當前名稱:如何借助CSSmask遮罩顯著優(yōu)化PNG圖片的尺寸-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://jinyejixie.com/article6/dcgiog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、靜態(tài)網(wǎng)站、云服務(wù)器、企業(yè)網(wǎng)站制作、用戶體驗、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)