python 批量压缩图片的脚本


Posted in Python onJune 02, 2021

简介

用Python批量压缩图片,把文件夹或图片直接拖入即可

需要 Needs

Python 3

Pillow (用pip install pillow来安装即可)

用法 Usage

把文件夹或图片直接拖入即可。如果拖入的是文件夹,则会遍历子文件夹把所有图片都压缩了。

注意,压缩后的文件会直接替换原来的文件,文件名不变,尺寸不变,只改变压缩质量。

文件的开头有两个变量:

SIZE_CUT = 4 表示大于4MB的图片都会进行压缩

QUALITY = 90 表示压缩质量90,这个质量基本人眼是看不出来啥差距的,而且很多原先10M的图能压缩一半。80以下的质量大概就不太行了。

代码

#!/usr/bin/python3
# -*- coding: UTF-8 -*-

# Created by Mario Chen, 01.04.2021, Shenzhen
# My Github site: https://github.com/Mario-Hero

import sys
import os
from PIL import Image

SIZE_CUT = 4   # picture over this size should be compressed. Units: MB
QUALITY = 90  # 90 is good, this number should not be smaller than 80.


def isPic(name):
    namelower = name.lower()
    return namelower.endswith("jpeg") or namelower.endswith("jpg") or namelower.endswith("png")


def compressImg(file):
    #print("The size of", file, "is: ", os.path.getsize(file))
    im = Image.open(file)
    im.save(file, quality=QUALITY)


def compress(folder):
    try:
        if os.path.isdir(folder):
            print(folder)
            file_list = os.listdir(folder)
            for file in file_list:
                if os.path.isdir(folder+"/"+file):
                    #print(folder +"/"+ file)
                    compress(folder +"/"+file)
                else:
                    if isPic(file):
                        if os.path.getsize(folder + "/" + file) > (SIZE_CUT * 1024 * 1024):
                            compressImg(folder + "/" + file)
                            print(file)
        else:
            if isPic(folder):
                if os.path.getsize(folder) > (SIZE_CUT * 1024 * 1024):
                    compressImg(folder)
    except BaseException:
        return


if __name__ == '__main__':
    for folder in sys.argv:
        #print(folder)
        compress(folder)
    print("Finish.")
    #os.system("pause")

实现效果

python 批量压缩图片的脚本

压缩后大小

python 批量压缩图片的脚本

另外一种图片压缩实现方式

同样自动遍历目录下的图片

import os
from PIL import Image
import threading,time

def imgToProgressive(path):
    if not path.split('.')[-1:][0] in ['png','jpg','jpeg']:  #if path isn't a image file,return
        return
    if os.path.isdir(path):
        return
##########transform img to progressive
    img = Image.open(path)
    destination = path.split('.')[:-1][0]+'_destination.'+path.split('.')[-1:][0]
    try:
        print(path.split('\\')[-1:][0],'开始转换图片')
        img.save(destination, "JPEG", quality=80, optimize=True, progressive=True) #转换就是直接另存为
        print(path.split('\\')[-1:][0],'转换完毕')
    except IOError:
        PIL.ImageFile.MAXBLOCK = img.size[0] * img.size[1]
        img.save(destination, "JPEG", quality=80, optimize=True, progressive=True)
        print(path.split('\\')[-1:][0],'转换完毕')
    print('开始重命名文件')
    os.remove(path)
    os.rename(destination,path)

for d,_,fl in os.walk(os.getcwd()):    #遍历目录下所有文件
    for f in fl:
        try:
            imgToProgressive(d+'\\'+f)
        except:
            pass

以上就是python 批量压缩图片的脚本的详细内容,更多关于python 批量压缩图片的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python检测服务器是否正常
Feb 16 Python
浅谈python内置变量-reversed(seq)
Jun 21 Python
python编写朴素贝叶斯用于文本分类
Dec 21 Python
Python实现多线程的两种方式分析
Aug 29 Python
python语言元素知识点详解
May 15 Python
python里运用私有属性和方法总结
Jul 08 Python
python机器学习包mlxtend的安装和配置详解
Aug 21 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
Jan 08 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
Jun 08 Python
使用OpenCV去除面积较小的连通域
Jul 05 Python
Django实现随机图形验证码的示例
Oct 15 Python
OpenCV3.3+Python3.6实现图片高斯模糊
May 18 Python
python操作xlsx格式文件并读取
关于Numpy之repeat、tile的用法总结
Jun 02 #Python
Matlab如何实现矩阵复制扩充
Jun 02 #Python
给numpy.array增加维度的超简单方法
Jun 02 #Python
pytorch model.cuda()花费时间很长的解决
如何理解及使用Python闭包
python pygame入门教程
You might like
php抽象类使用要点与注意事项分析
2015/02/09 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
php表单处理操作
2017/11/16 PHP
详解Laravel服务容器的绑定与解析
2019/11/05 PHP
ajax无刷新动态调用股票信息(改良版)
2008/11/01 Javascript
动态获取复选框checkbox选中个数的jquery代码
2013/06/25 Javascript
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
JavaScript实现随机替换图片的方法
2015/04/16 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
2015/08/24 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
vue+vux实现移动端文件上传样式
2017/07/28 Javascript
浅谈在koa2中实现页面渲染的全局数据
2017/10/09 Javascript
详谈构造函数加括号与不加括号的区别
2017/10/26 Javascript
vue使用vant中的checkbox实现全选功能
2020/11/17 Vue.js
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
python中使用urllib2获取http请求状态码的代码例子
2014/07/07 Python
Python中用Decorator来简化元编程的教程
2015/04/13 Python
浅析PHP与Python进行数据交互
2018/05/15 Python
Python设计模式之桥接模式原理与用法实例分析
2019/01/10 Python
浅谈Python反射 & 单例模式
2019/03/21 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
2021/01/05 Python
CSS3 倾斜的网页图片库实例教程
2009/11/14 HTML / CSS
JOSEPH官网:英国奢侈时尚品牌
2018/01/31 全球购物
const和static readonly区别
2013/05/20 面试题
生物学专业求职信
2014/07/23 职场文书
党性分析材料格式
2014/12/19 职场文书
2015年技术工作总结范文
2015/04/20 职场文书
离婚被告代理词
2015/05/23 职场文书
《黄山奇石》教学反思
2016/02/18 职场文书
Python利器openpyxl之操作excel表格
2021/04/17 Python
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server
python模板入门教程之flask Jinja
2022/04/11 Python