您现在的位置是:网站首页> 编程资料编程资料
借助CSS mask遮罩显著优化PNG图片的尺寸(推荐)借助CSS mask遮罩显著优化PNG图片的尺寸(推荐)详解css3 mask遮罩实现一些特效CSS3 mask 遮罩的具体使用方法
2021-09-03
1238人已围观
简介 这篇文章主要介绍了借助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卡片图使用的是 元素,HTML代码如下:
使用如下的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/raXQsg0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0RXRFdEV0S1Yy8nDAMxEIZnE8h53YFJIOeQIlJH/FL/JRjfjA06z6zn6+C/SEhOYeQURk2loHSvUPftKio25R3K5oqdXwhb4BQ+TmHkFEZOYeQURk5h5BRGC3B2DyU9EiWUVGRCyISU0mU8tpMyICP1Svoj9QgduxT1afxpJ6VH6hY6LpTy1HFc9isiYS/oBPlGYwAAAABJRU5ErkJggg==);
}
眼见为实,您可以狠狠地点击这里: PNG图片使用CSS遮罩尺寸优化demo
JPG格式卡片最终实现效果如下图所示(四个角透明了):

三、优化后的效果对比
优化前后4张图大小对比如下:

原来4张图片支持是458K,优化后的图片尺寸是197K+1K,大小减小了 56.8% !
酷儿~
mask-image 这种移动端很早很早就已经支持了,这里使用的又是传统语法,完全没有任何兼容性问题,大家可以放心使用。
总结
到此这篇关于借助CSS mask遮罩显著优化PNG图片的尺寸的文章就介绍到这了,更多相关css mask 遮罩内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!
相关内容
- flex弹性盒布局最后一行左对齐的实现思路解决flex布局space-between最后一行左对齐的方法css3 flex布局 justify-content:space-between 最后一行左对齐让CSS flex布局最后一行列表左对齐的N种方法(小结)
- 如何利用定位使元素居中(web端页面布局小技巧)绝对定位元素的水平垂直居中的方法(3种任选)CSS实现定位元素居中的方法CSS绝对定位元素left设为50%实现水平居中将一个绝对定位的div水平垂直居中对齐使用绝对定位+负外边距让DIV层水平垂直居中页面通过定位来实现不定宽度居中显示CSS实现网页分栏布局的方法:绝对定位和浮动CSS高级技巧:网页布局-CSS教程-网页制作-网页教学网
- CSS3实现渐变背景兼容问题通过css3背景控制属性+使用颜色过渡实现渐变效果css3实现背景动态渐变效果css3 给背景设置渐变色的方法用CSS3实现背景渐变的方法
- 通过css3的filter滤镜改变png图片的颜色的示例代码详解CSS3 filter:drop-shadow滤镜与box-shadow区别与应用CSS3 中filter(滤镜)属性使用详解jquery和CSS3图片排序过滤搜索插件Filterizr详解CSS3中强大的filter(滤镜)属性CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
- 基于ccs3的timeline时间线实现方法
- 基于CSS 判断鼠标进入的方向CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
- 深入浅析CSS3中的Flex布局整理CSS实现动态图片的九宫格布局的实例代码css之display属性之inline-block布局实现详解详解CSS中的flex布局css用Flex布局制作简易柱状图的实现使用CSS和Java来构建管理仪表盘布局的实例代码
- CSS中层叠上下文的具体使用css3+svg实现创意图片层叠音乐播放样式代码css 层叠与z-index的示例代码css样式层叠规则详解CSS 中重要的层叠概念详解详解CSS中的特指度和层叠问题
- 纯CSS3实现移动端展开和收起效果的示例代码HTML5给汉字加拼音收起展开组件的实现代码纯CSS3实现炫酷圆形主菜单动画展开收起特效源码CSS3 实现侧边栏展开收起动画
- CSS实现聊天气泡效果CSS3 仿微信聊天小气泡实例代码纯CSS实现聊天框小尖角、气泡效果

