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 11 Python
python实现简单登陆流程的方法
Apr 22 Python
python3实现点餐系统
Jan 24 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
python发送多人邮件没有展示收件人问题的解决方法
Jun 21 Python
浅谈Python小波分析库Pywavelets的一点使用心得
Jul 09 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
Aug 12 Python
Python帮你微信头像任意添加装饰别再@微信官方了
Sep 25 Python
Python操作qml对象过程详解
Sep 26 Python
Python内置加密模块用法解析
Nov 25 Python
TensorFlow获取加载模型中的全部张量名称代码
Feb 11 Python
Selenium使用Chrome模拟手机浏览器方法解析
Apr 10 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目录管理函数小结
2008/09/10 PHP
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
php根据日期判断星座的函数分享
2014/02/13 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
2015/10/09 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
nodejs下打包模块archiver详解
2014/12/03 NodeJs
JavaScript生成的动态下雨背景效果实现方法
2015/02/25 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
JS基于Mootools实现的个性菜单效果代码
2015/10/21 Javascript
详解Vue方法与事件
2017/03/09 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
Vue实现导出excel表格功能
2018/03/30 Javascript
微信小程序学习笔记之目录结构、基本配置图文详解
2019/03/28 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
2019/05/13 Javascript
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
教你搭建按需加载的Vue组件库(小结)
2019/07/29 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
[04:53]DOTA2英雄基础教程 祈求者
2014/01/03 DOTA
Python实现程序的单一实例用法分析
2015/06/03 Python
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
在线吉他课程,学习如何弹吉他:Fender Play
2019/02/28 全球购物
如何在Cookie里面保存Unicode和国际化字符
2013/05/25 面试题
毕业生自荐书
2013/12/18 职场文书
消防安全责任书范本
2014/04/15 职场文书
2015年光棍节活动总结
2015/03/24 职场文书
2015初中团委工作总结
2015/07/28 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python
基于Pygame实现简单的贪吃蛇游戏
2021/12/06 Python