使用Python批量对图片进行压缩处理

版权声明:本文为连鹏伟原创文章,未经博主允许不得转载。 https://blog.csdn.net/lpwmm/article/details/82917788

这两天在对网站服务器进行迁移的过程中发现历史积累的图片附件炒鸡多,许多都是未经压缩直接从相机里面拷出来上传的原始分辨率尺寸,相当浪费空间,而网站页面上进行图片显示其实只需要宽度能达到700px就够了,于是就萌生了这个想法,怎么批量把网站上所有图片批量调整一下分辨率进行空间压缩,嘿~您别说,Python还真对得起咱zei张脸,简直不能好用更多。废话不说了,直接走起~

任务目标

对指定文件夹中(包含所有子目录) 所有.jpg和.JPG文件进行批量尺寸调整,并覆盖保存原来的文件

实现环境

Python 3.6.5

所需扩展包:pillow,glob(glob系统自带的有,pillow需要pip安装一下)

实现代码

#!/usr/bin/python
'''
对网站上传的jpg格式图片附件批量进行尺寸调整
连鹏伟
2018.10.20
'''
from PIL import Image
import os
from glob import glob

fpath = "/opt/apache-tomcat-8.5.24/webapps/ROOT/r/u/"
size = (950, 950)   # 定义要调整成为的尺寸(PIL会自动根据原始图片的长宽比来缩放适应设置的尺寸)
# glob.glob()用来进行模糊查询,增加参数recursive=True后可以使用**/来匹配所有子目录
files = glob( fpath + "**/*.JPG", recursive=True) + glob(fpath + "**/*.jpg", recursive=True)
total = len(files) #总文件数
cur = 1 #当前文件序号
print("共有" + str(total) + "个文件,开始处理")
print("-----------------------------------")
for infile in files:
    try:
        #f, ext = os.path.splitext(infile) # 分离文件名和后缀
        print("进度:" + str(cur) + "/" + str(total) + "   " + infile)
        img = Image.open(infile) # 打开图片文件
        if img.width>1200:
            img.thumbnail(size, Image.ANTIALIAS) # 使用抗锯齿模式生成缩略图(压缩图片)
            img.save(infile, "JPEG") # 保存成与原文件名一致的文件,会自动覆盖源文件
        else:
            print(infile + "宽度小于1200px,无需处理,已忽略")
        cur = cur + 1

    except OSError:
        print(infile + "文件错误,忽略")


结束语

过程的实现主要是使用了PIL里面Image包的thumbnail方法对图片进行缩小处理,而这个方法原本是做缩略图用的,我们在设置好合适的尺寸后,用于调整图片大小也是很方便的。

猜你喜欢

转载自blog.csdn.net/lpwmm/article/details/82917788