Python快速压缩文件夹中所有图片

Posted by 石坤 on 2019-01-21

使用PIL压缩图片

简单的例子

1
2
3
4
5
6
7
8
from PIL import Image
path = "根据自己的情况填写"

foo = Image.open(path)
foo = foo.resize((160,300),Image.ANTIALIAS)
# resize()的两个参数分别限定宽度和长度
foo.save(path ,optimize=True,quality=85)
# save()第一个参数path, 可以另外指定一个已压缩图片的存储路径, 也可以直接把原图片覆盖. quality为压缩质量, 推荐使用85, 可以保证画面清晰而且图片尽可能小.

更为复杂的例子

遍历指定文件夹, 并把不符合规范的图片压缩, 使用压缩后的图片把原图片覆盖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import os
from PIL import Image
import time
def compressImage(path):
foo = Image.open(path)


# foo.size[0]得到是图片的宽度, 由于我处理的图片需要的手机上显示, 所以将宽度大于375的图片, 尽可能的压缩.

# 你可以根据自己的情况, 对该条件进行修改
if foo.size[0] > 375:
width = foo.size[0]
rate = width / 375
width = int(foo.size[0] / rate)
length = int(foo.size[1] / rate)

foo = foo.resize((width, length), Image.ANTIALIAS)
foo.save(path, optimize=True, quality=85)

thisdir = "/home/ubuntu/sites/demo.windytrees.cn/ahu/upload"
# 指定图片文件夹

# r=root, d=directories, f = files

def executeCompressImage():
# walk()会遍历指定路径的所有文件

for r, d, f in os.walk(thisdir):
for file in f:
path = os.path.join(r, file)
compressImage(path)
while True:
executeCompressImage()
time.sleep(600)