您好,登錄后才能下訂單哦!
這篇文章主要介紹如何借助CSS mask遮罩顯著優化PNG圖片的尺寸,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
一、無法進一步壓縮的PNG圖片
例如有如下所示的PNG圖片(尺寸1/2顯示了),使用頂級的PNG工具壓縮后還有122K。
原圖地址這里: https://image.zhangxinxu.com/image/blog/202005/card.png
PNG尺寸大小示意如下:
如果項目就一張這樣的圖還好,要是頁面一下子有很多這么個尺寸的PNG,那對首次加載的性能影響就非常明顯了,例如下圖4張卡片圖就有500K。
由于卡片的背景也是復雜圖形,邊邊角角必須要透明,改成JPG格式肯定不行(邊角會變成純色),就沒有什么可以進一步優化的方法嗎?
有,那就是借助CSS mask遮罩顯著優化PNG圖片的尺寸。
二、mask-image與PNG尺寸優化
mask-image
遮罩有這樣一個功能,只有遮罩圖片存在的區域才顯示,那豈不是如果是一個邊角透明的任意遮罩圖,就可以讓JPG圖片邊角的白色透明了。
方法可行,demo這里。
具體做法如下。
1. PNG轉JPG
先把PNG圖片保持成JPG,圖片質量50%就足夠了,如下圖所示:
此時,圖片的尺寸可以減小超過50%!
2. 根據PNG輪廓制作純色PNG
PNG圖片之所以尺寸大,就是因為色彩過于豐富,如果我們變成純色,尺寸可以降低100倍不止。
此時的純黑色顏色填充PNG圖片的尺寸不足1K:
3. 使用遮罩讓JPG邊角白色透明
假設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應用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遮罩尺寸優化demo
JPG格式卡片最終實現效果如下圖所示(四個角透明了):
三、優化后的效果對比
優化前后4張圖大小對比如下:
原來4張圖片支持是458K,優化后的圖片尺寸是197K+1K,大小減小了 56.8% !
酷兒~
mask-image
這種移動端很早很早就已經支持了,這里使用的又是傳統語法,完全沒有任何兼容性問題,大家可以放心使用。
以上是“如何借助CSS mask遮罩顯著優化PNG圖片的尺寸”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。