网页中常见的图片格式
在大多数的web页面中,图片占到了页面大小的60%-70%。因此在web开发中,不同的场景使用合适的图片格式对web页面的性能和体验是很重要的
格式 | 类型 | 压缩方式 | 动图支持 | 透明支持 | 颜色显示 | 压缩 |
---|---|---|---|---|---|---|
jpg/jpeg | 位图 | 有损压缩 | 不支持 | 不支持 | 真彩色 | 压缩后体积较小 多次压缩会失真 |
png | 位图 | 无损压缩 | 不支持 | 支持 | 支持索引色也支持真彩色 | 压缩后,体积相对较大 多次压缩后,图片不会失真 |
gif | 位图 | 无损压缩 | 支持 | 支持 | 索引色 | 压缩体积小 |
apng | 位图 | 无损压缩 | 支持 | 支持 | 支持索引色也支持真彩色 | |
webp | 位图 | 支持无损压缩和有损压缩 | 支持 | 支持 | 真彩色 | 压缩后图片比jpg和png都小 |
svg | 矢量图 | 无损压缩 | 支持 | 支持 | 真彩色 | 通过指令来进行渲染,对于复杂的图片消耗的性能较大 |
base64 | 字符串 | 支持 | 支持 | 真彩色 | base64本质是转换为了字符串,所以不存在压缩 |
jpg/jpeg
jpg和jpeg是等价的,jpg是因为早期Windows操作系统只支持3位后缀
jpg是有损压缩, 而每从网站上保存一次图片的时候,浏览器会自动对图片进行一次压缩
这也就意味着每下载一次jpeg图片,jpeg图片会失真一次
一张照片在Instagram反复上传下载90次之后....,, 在最后jpg图片完全变样了
jpg图的使用场景:
- 适合那些色彩丰富的图片
- 适合那些对图片质量要求不高的场景
- 不适合文字或者线条较多的图片
png
png 是20世纪90年代推出的一种图片格式,它采用的是无损压缩,其目的是为了取代gif
png分为png8,png24,png32.这几种主要区别是储存方式不同
类别 | 说明 |
---|---|
png8 | 只支持256色,支持透明(要么全透明,要么不透明) |
png24 | 支持更多的颜色,但是不支持透明 在Photoshop中导出的png24实际是png32 |
png32 | 比png24多了8位alpha通道,所以它支持透明度的设置 |
png图的使用场景:
- 适合文本或线条较多的图片
- 适合存在透明背景的图片
gif
- gif使用8位编码,所以gif只能只能表示256色,也就是索引色
- 不支持半透明,像素无法平滑过渡
- 边缘会有明显锯齿
常见的解决方案gif锯齿效果的方式是在图片的边缘加一圈白边,以减轻这种视觉效果
apng
- 本质就是png格式图片的扩展,使png图片格式支持了动画效果
- 需要进行兼容性处理
- 可以在gif_vs_apng对比两者区别
webp
- 集成了png和jpg的优点,是google专门为web网站开发的图片格式
- 需要进行兼容性处理
svg
-
SVG图片由直线和曲线以及绘制它们的方法(算法)组成
-
SVG使用XML来描述图片
所以在任何时候你都可以把svg当做一个文本文件来对待,因此svg的体积更小且修改方便
base64
优点
- base64格式的图片是文本格式,本质上是字符串
- base64可以直接将图片嵌入到网页中,不用再请求服务器调用图片资源,减少了服务器访问次数
- 使用方式和普通图片没有任何的区别,所以对于网页中的小图片适合采用base64进行编码后嵌入到网页中
缺点
- base64格式的文本内容较多,存储在数据库中增大了数据库服务器的压力
- base64格式的内容太多,在网页中使用过多的base64格式图片,会导致加载网页的速度会降低,可能会影响用户的体验
- base64无法缓存,要缓存只能缓存包含base64的文件,比如js或者css
- 相比其他格式,体积会至少大1/3,并且在编码解码有额外消耗
<!--
1. 通过src引入base64格式图片
2. data:image/png;base64,xxxxxx
+ data => 数据URI的开头,标志着接下来是直接嵌入在网页中的数据
+ image/png => 图片元素的MIME类型
+ ;base64 => 表示接下来的数据是使用Base64编码方案编码的
+ ,xxxxx => xxxxx即为使用base64编码后的数据
-->
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAApgAAAKYB3X3/OAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANCSURBVEiJtZZPbBtFFMZ/M7ubXdtdb1xSFyeilBapySVU8h8OoFaooFSqiihIVIpQBKci6KEg9Q6H9kovIHoCIVQJJCKE1ENFjnAgcaSGC6rEnxBwA04Tx43t2FnvDAfjkNibxgHxnWb2e/u992bee7tCa00YFsffekFY+nUzFtjW0LrvjRXrCDIAaPLlW0nHL0SsZtVoaF98mLrx3pdhOqLtYPHChahZcYYO7KvPFxvRl5XPp1sN3adWiD1ZAqD6XYK1b/dvE5IWryTt2udLFedwc1+9kLp+vbbpoDh+6TklxBeAi9TL0taeWpdmZzQDry0AcO+jQ12RyohqqoYoo8RDwJrU+qXkjWtfi8Xxt58BdQuwQs9qC/afLwCw8tnQbqYAPsgxE1S6F3EAIXux2oQFKm0ihMsOF71dHYx+f3NND68ghCu1YIoePPQN1pGRABkJ6Bus96CutRZMydTl+TvuiRW1m3n0eDl0vRPcEysqdXn+jsQPsrHMquGeXEaY4Yk4wxWcY5V/9scqOMOVUFthatyTy8QyqwZ+kDURKoMWxNKr2EeqVKcTNOajqKoBgOE28U4tdQl5p5bwCw7BWquaZSzAPlwjlithJtp3pTImSqQRrb2Z8PHGigD4RZuNX6JYj6wj7O4TFLbCO/Mn/m8R+h6rYSUb3ekokRY6f/YukArN979jcW+V/S8g0eT/N3VN3kTqWbQ428m9/8k0P/1aIhF36PccEl6EhOcAUCrXKZXXWS3XKd2vc/TRBG9O5ELC17MmWubD2nKhUKZa26Ba2+D3P+4/MNCFwg59oWVeYhkzgN/JDR8deKBoD7Y+ljEjGZ0sosXVTvbc6RHirr2reNy1OXd6pJsQ+gqjk8VWFYmHrwBzW/n+uMPFiRwHB2I7ih8ciHFxIkd/3Omk5tCDV1t+2nNu5sxxpDFNx+huNhVT3/zMDz8usXC3ddaHBj1GHj/As08fwTS7Kt1HBTmyN29vdwAw+/wbwLVOJ3uAD1wi/dUH7Qei66PfyuRj4Ik9is+hglfbkbfR3cnZm7chlUWLdwmprtCohX4HUtlOcQjLYCu+fzGJH2QRKvP3UNz8bWk1qMxjGTOMThZ3kvgLI5AzFfo379UAAAAASUVORK5CYII="
>
ICO
.ico
是一种图标格式,这种图标扩展名为.icon、.ico
常见于windows的桌面图标和网址导航栏的小图标
BMP
BMP (Windows Bit Map)是标准的Windows影像格式
不支持压缩 也不支持透明
是一种比较老的图片格式,目前在web中极少使用
AVIF
AVIF是一种基于AV1视频编码的新图像格式
相对于JPEG,WEBP这类图片格式来说,它的压缩率更高,并且画面细节更好
而最关键的是,它是免费且开源的,没有任何授权费用
因为AVIF使用的是视频编码格式,所以AVIF更适合于动图
但是AVIF目前是比较新的技术,只有新版的Firefox和Chrome支持