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编写vim插件的简单示例
Apr 17 Python
Python实现提取文章摘要的方法
Apr 21 Python
python使用xlrd模块读取xlsx文件中的ip方法
Jan 11 Python
对Python的多进程锁的使用方法详解
Feb 18 Python
Python使用import导入本地脚本及导入模块的技巧总结
Aug 07 Python
Python使用循环神经网络解决文本分类问题的方法详解
Jan 16 Python
Django admin 实现search_fields精确查询实例
Mar 30 Python
Python使用monkey.patch_all()解决协程阻塞问题
Apr 15 Python
用python对oracle进行简单性能测试
Dec 05 Python
Flask中jinja2的继承实现方法及实例
Mar 03 Python
Python3 多线程(连接池)操作MySQL插入数据
Jun 09 Python
Python实现简单的俄罗斯方块游戏
Sep 25 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
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
浅谈php和.net的区别
2014/09/28 PHP
php去除字符串中空字符的常用方法小结
2015/03/17 PHP
PHP如何实现跨域
2016/05/30 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
2016/12/27 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
2010/05/18 Javascript
jQuery前台数据获取实现代码
2011/03/16 Javascript
jQuery数据显示插件整合实现代码
2011/10/24 Javascript
使用js实现雪花飘落效果
2013/08/26 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
详解vue-router和vue-cli以及组件之间的传值
2017/07/04 Javascript
Axios学习笔记之使用方法教程
2017/07/21 Javascript
vue与TypeScript集成配置最简教程(推荐)
2017/10/17 Javascript
利用three.js画一个3D立体的正方体示例代码
2017/11/19 Javascript
JavaScript实现删除数组重复元素的5种常用高效算法总结
2018/01/18 Javascript
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
Vue props 单向数据流的实现
2018/11/06 Javascript
浅谈python数据类型及类型转换
2017/12/18 Python
Python 实现一个手机号码获取妹子名字的功能
2019/09/25 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
2020/06/02 HTML / CSS
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
青年教师培训方案
2014/02/06 职场文书
小学生保护环境倡议书
2014/05/15 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
2014年教师工作总结
2014/11/10 职场文书
亮剑观后感300字
2015/06/05 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书
Pytorch中的学习率衰减及其用法详解
2021/06/05 Python
MySQL修改默认引擎和字符集详情
2021/09/25 MySQL