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 06 Python
举例讲解Python中的身份运算符的使用方法
Oct 13 Python
python迭代dict的key和value的方法
Jul 06 Python
python3实现表白神器
Apr 09 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
Jun 25 Python
django-allauth入门学习和使用详解
Jul 03 Python
10行Python代码计算汽车数量的实现方法
Oct 23 Python
python实现画循环圆
Nov 23 Python
Python如何使用argparse模块处理命令行参数
Dec 11 Python
Python filter()及reduce()函数使用方法解析
Sep 05 Python
python glom模块的使用简介
Apr 13 Python
Jupyter notebook 不自动弹出网页的解决方案
May 21 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学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
解析curl提交GET,POST,Cookie的简单方法
2013/06/29 PHP
php基于str_pad实现卡号不足位数自动补0的方法
2014/11/12 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
2015/04/08 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
2017/07/10 PHP
Laravel5.1 框架路由基础详解
2020/01/04 PHP
jQuery的deferred对象详解
2014/11/12 Javascript
AngularJs实现分页功能不带省略号的代码
2016/05/30 Javascript
AngularJS表格详解及示例代码
2016/08/17 Javascript
原生js实现倒计时--2018
2017/02/21 Javascript
详解react-router4 异步加载路由两种方法
2017/09/12 Javascript
基于javascript中的typeof和类型判断(详解)
2017/10/27 Javascript
详解node.js中的npm和webpack配置方法
2018/01/21 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
Python中字符串的修改及传参详解
2016/11/30 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
2018/01/05 Python
python3将视频流保存为本地视频文件
2018/06/20 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
Python操作Jira库常用方法解析
2020/04/10 Python
Python tkinter界面实现历史天气查询的示例代码
2020/08/23 Python
CSS3实现彩色进度条动画的示例
2020/10/29 HTML / CSS
美国最大的珠宝商之一:Littman Jewelers
2016/11/13 全球购物
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
医学生求职信
2014/07/01 职场文书
工作批评与自我批评范文
2014/10/16 职场文书
优秀班主任材料
2014/12/16 职场文书
公司门卫岗位职责
2015/04/13 职场文书
预备党员介绍人意见
2015/06/01 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS
opencv深入浅出了解机器学习和深度学习
2022/03/17 Python
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js