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中分数的相关使用教程
Mar 30 Python
Python正则表达式匹配HTML页面编码
Apr 08 Python
取numpy数组的某几行某几列方法
Apr 03 Python
Python向Excel中插入图片的简单实现方法
Apr 24 Python
用python写扫雷游戏实例代码分享
May 27 Python
python tkinter canvas 显示图片的示例
Jun 13 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
Aug 26 Python
python+rsync精确同步指定格式文件
Aug 29 Python
Python hashlib加密模块常用方法解析
Dec 18 Python
pytorch GAN生成对抗网络实例
Jan 10 Python
Django之choices选项和富文本编辑器的使用详解
Apr 01 Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Apr 09 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图片验证码实例
2014/03/21 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
JQuery扩展插件Validate 3通过参数设置错误信息
2011/09/05 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
Node.js中的process.nextTick使用实例
2015/06/25 Javascript
快速学习AngularJs HTTP响应拦截器
2015/12/31 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
js querySelector() 使用方法
2016/12/21 Javascript
Angular 4.x 动态创建表单实例
2017/04/25 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
2017/09/04 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
vue + axios get下载文件功能
2019/09/25 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
python文件操作整理汇总
2014/10/21 Python
Python中常见的数据类型小结
2015/08/29 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
2019/02/22 Python
Django使用中间键实现csrf认证详解
2019/07/22 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
Python实现冒泡排序算法的完整实例
2020/11/04 Python
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类
2012/02/06 面试题
轻金属冶金专业毕业生自荐信
2013/11/02 职场文书
感恩的演讲稿
2014/05/06 职场文书
感恩母亲节活动总结
2015/02/10 职场文书
小学生法制教育心得体会
2016/01/14 职场文书
音乐课《小猫钓鱼》教学反思
2016/02/18 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书
详解Flask开发技巧之异常处理
2021/06/15 Python
MySQL 主从复制数据不一致的解决方法
2022/03/18 MySQL
mysql 生成连续日期及变量赋值
2022/03/20 MySQL
星际争霸:毕姥爷vs解冻03
2022/04/01 星际争霸
使用Apache Camel表达REST服务的方法
2022/06/10 Servers