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中处理时间之clock()方法的使用
May 22 Python
用Python的Flask框架结合MySQL写一个内存监控程序
Nov 07 Python
解决python3爬虫无法显示中文的问题
Apr 12 Python
浅谈Python大神都是这样处理XML文件的
May 31 Python
Pandas之DataFrame对象的列和索引之间的转化
Jun 25 Python
python点击鼠标获取坐标(Graphics)
Aug 10 Python
python求平均数、方差、中位数的例子
Aug 22 Python
关于Python 中的时间处理包datetime和arrow的方法详解
Mar 19 Python
django rest framework 过滤时间操作
Jul 12 Python
python线程里哪种模块比较适合
Aug 02 Python
如何在python中处理配置文件代码实例
Sep 27 Python
PyQt 如何创建自定义QWidget
Mar 24 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 文件扩展名 获取函数
2009/06/03 PHP
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
2011/05/18 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
2015/09/10 PHP
php版微信公众号接口实现发红包的方法
2016/10/14 PHP
yii2.0框架场景的简单使用示例
2020/01/25 PHP
jQuery表格行换色的三种实现方法
2011/06/27 Javascript
jquery动态添加删除div 具体实现
2013/07/20 Javascript
swtich/if...else的替代语句
2015/08/16 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
引用jquery框架后出错的解决方法
2016/08/09 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
微信端开发--登录小程序步骤
2017/01/11 Javascript
JS实现的缓冲运动效果示例
2018/04/30 Javascript
以v-model与promise两种方式实现vue弹窗组件
2018/05/21 Javascript
js事件on动态绑定数据,绑定多个事件的方法
2018/09/15 Javascript
JS实现倒序输出的几种常用方法示例
2019/04/13 Javascript
vue中keep-alive组件的入门使用教程
2019/06/06 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
学习python 之编写简单乘法运算题
2016/02/27 Python
利用Python破解验证码实例详解
2016/12/08 Python
Window10下python3.7 安装与卸载教程图解
2019/09/30 Python
浅谈Django2.0 加xadmin踩的坑
2019/11/15 Python
django和flask哪个值得研究学习
2020/07/31 Python
ETO男装官方网店:ETO Jeans
2019/02/28 全球购物
EJB的角色和三个对象
2015/12/31 面试题
大学生职业生涯规划书模板
2014/01/18 职场文书
表演方阵解说词
2014/02/08 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
岗位安全生产责任书
2014/07/28 职场文书
向国旗敬礼学生寄语大全
2014/09/30 职场文书
2015年汽车销售经理工作总结
2015/04/27 职场文书
学风建设主题班会
2015/08/17 职场文书
详解Laravel服务容器的优势
2021/05/29 PHP
《极主夫道》真人电影正式预告 定档6月3日上映
2022/04/05 日漫
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL