其他分享
首页 > 其他分享> > 图片格式转换与压缩的一点理解

图片格式转换与压缩的一点理解

作者:互联网

本想鸽掉这一篇,因为实在没啥好讲的。然后过了几天想想还是随便记点吧。

1. WEBP

谷歌推出的图片压缩格式,同时支持有损和无损压缩,通常比同品质的jpeg,png,gif小,已经得到主流浏览器的普遍支持。因此把自家网站的图片换成webp成了一个趋势。
一个不错的方案是,提供图片资源的服务器检测客户端的ua是否支持webp,对于支持的客户端重写url为对应的webp资源。通过cdn部署的话可以通过类似cloudfront的lambda钩子来实现。

一般来说,各个语言的图片处理库都会支持webp格式转换,不过要想得到比较好的体验,还是需要研究一下jpg,png的特点来调整对应的参数(如果支持接收参数的话)。转换的初衷肯定是因为webp更小,如果遇到下面问题就得不偿失了。

  1. jpeg转webp后更大了?
  2. png转webp后变大了?

2. JPEG

jpeg曾经是一个非常厉害的有损压缩格式,大致原理可以通过这个视频了解:

JPEG不可思议的压缩率——归功于信号处理理论
ps: 评论区也很精彩

大概总结下就是:

一旦了解了jpeg的压缩原理,那么就知道为啥jpeg转webp会变大了:原图jpeg的压缩率已经很高了,转换的时候指定的webp的压缩品质却比较高。举个简单例子解释一下:

gm -verbose example.jpg

然而可惜的是目前尝试的各个python/js库都不支持获取这个值(也可能是姿势不对)。

3. PNG

PNG的原理没有去深挖,此处应该留个坑。仅凭印象对png的理解有

所以对于某些库,比如sharp,在转换webp的过程中会先把png转成RGBA格式,这样转成webp之后就会变得很大,需要手动指定palette的配置参数。

4. GIF

GIF其实就是连续的png,文件头中定义了帧数,播放间隔。可以理解为数组 PNG[]。一般来说默认的行为都是只读取gif的第一帧。因此如果需要转换webp,需要读取帧数pages和循环次数loop,再传给webp转换处理。

5. 图片resize

我们知道对于不同的屏幕,逻辑像素和物理像素并不是一比一的对应关系(DevicePixelRate)。因此为了在高分屏获得最佳体验,一般会提供2倍甚至3倍尺寸的图片。实际应用中我们可能希望只上传一张高清大图,通过图片处理服务生成更小尺寸的图,以及转换成对应的webp格式。这里就涉及到resize下采样的问题了。

标签:转换,比特,品质,图片格式,jpeg,webp,压缩,png,图片
来源: https://www.cnblogs.com/dapianzi/p/16384190.html