在目前的一个项目中,后台运营人员传图的时候,都是传的大图,导致前端网页加载缓慢,我用微信开发者工具查看了一下,光图片就有3~4MB,所以找到了一些工具来方便地进行图片压缩。
基于PIL进行图片压缩
本来想用基于PIL使用python进行图片压缩,无奈PIL装了半天没装上,有能装上的,还是可以用pil的,这个是参考文章: python脚本编程:批量压缩图片大小
基于ImageMagick进行图片压缩
- mogrify方式
批量压缩当前文件夹下的所有png图片
mogrify -path newdir -resize 200% *.png
- convert的shell脚本
找到当前文件夹及子文件夹中大于400K的img,并使用convert压缩该文件;
#!/bin/bash
echo "resize image";
# 找出大于400K的图片
for i in `find . -size +400k`;
do
# 压缩其中宽高大于450x1000的,到最大450x1000
convert -resize "450x1000>" $i $i;
# 压缩图片到65%
# convert $i -resize 65% $i;
# 压缩图片指定宽度为400
# convert -resize "400" $i $i;
echo "resize image $i";
done
- 压缩相关指令:
-quality
图片质量,jpg默认99,png默认75
-resize
60% 压缩到原有大小的65%
100x100 高度和宽度比例保留最高值,高比不变
100x100^ 高度和宽度比例保留最低值,宽高比不变
100x100! 宽度和高度强制转换,忽视宽高比
100x100> 更改长宽,当图片长或宽超过规定的尺寸
100x100< 更改长宽 只有当图片长宽都超过规定的尺寸
100x100^> 更改长宽,当图片长或宽超过规定的尺寸。高度和宽度比例保留最低值
100x100^< 更改长宽,只有当图片长宽都超过规定的尺寸。高度和宽度比例保留最低值
100 按指定的宽度缩放,保持宽高比例
x100 按指定高度缩放,保持宽高比
PNG和JPG
区别:
png是一种无损格式,JPG是有损格式。JPG在处理颜色很多的图片时,根据压缩率的不同,有时会去掉一些肉眼识别差距较小的中间颜色。但是PNG对于无损这个基本要求,会严格保留所有的色彩数。 所以。图片尺寸大,或者色彩数量多特别是渐变色的多的时候,PNG的体积会明显大于JPG
其实png和jpeg都可以,image载入以后,在内存里面是一样的.但是png的压缩算法解压快很多,jpeg的话可以有很高的压缩比(当然会有损失)
所以,你可以自己来平衡文件大小,图片质量和解压代价之间的关系什么时候用JPG或PNG
Android的界面能用png最好是用png了,因为32位的png颜色过渡平滑且支持透明。jpg是像素化压缩过的图片,质量已经下降了,再拿来做9path的按钮和平铺拉伸的控件必然惨不忍睹,要尽量避免。对于颜色繁杂的,比如照片墙纸之类的图片(有些应用的启动画面喜欢搞这种),那用jpg是最好不过了,这种图片压缩前压缩后肉眼分辨几乎不计,如果保存成png体积将是jpg的几倍甚至几十倍,严重浪费体积。
在线压缩图片工具
可以批量压缩图片,比国内动不动就要会员收费的好多了,唯一的缺陷就是指定文件大小来压缩时,还是需要注册会员。
https://tinypng.com/