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数组的处理代码
Jan 04 Python
Python中列表和元组的使用方法和区别详解
Dec 30 Python
用python写个自动SSH登录远程服务器的小工具(实例)
Jun 17 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
Jun 13 Python
python实现对输入的密文加密
Mar 20 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
Aug 06 Python
python requests更换代理适用于IP频率限制的方法
Aug 21 Python
python剪切视频与合并视频的实现
Mar 03 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
Aug 19 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
Jan 05 Python
Python之京东商品秒杀的实现示例
Jan 06 Python
使用Python爬虫爬取小红书完完整整的全过程
Jan 19 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
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
PHP header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
Yii使用Captcha验证码的方法
2015/12/28 PHP
php file_get_contents取文件中数组元素的方法
2017/04/01 PHP
PHP CURL使用详解
2019/03/21 PHP
js 方法实现返回多个数据的代码
2009/04/30 Javascript
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
Javascript selection的兼容性写法介绍
2013/12/20 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
2014/03/17 Javascript
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
express的中间件basicAuth详解
2014/12/04 Javascript
jQuery绑定事件on()与弹窗的简要概述
2016/04/27 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
js实现数字从零慢慢增加到指定数字示例
2019/11/07 Javascript
jquery html添加元素/删除元素操作实例详解
2020/05/20 jQuery
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
2020/11/05 Javascript
王纯业的Python学习笔记 下载
2007/02/10 Python
简述Python中的面向对象编程的概念
2015/04/27 Python
关于python中密码加盐的学习体会小结
2019/07/15 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
使用python自动追踪你的快递(物流推送邮箱)
2020/03/17 Python
Django-rest-framework中过滤器的定制实例
2020/04/01 Python
娇韵诗法国官网:Clarins法国
2019/01/29 全球购物
大二学期个人自我评价
2014/01/13 职场文书
关于人生的感言
2014/01/17 职场文书
运动会获奖感言
2014/02/11 职场文书
开工典礼策划方案
2014/05/23 职场文书
新书发布会策划方案
2014/06/09 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
Jupyter notebook 输出部分显示不全的解决方案
2021/04/24 Python