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 相关文章推荐
Go语言基于Socket编写服务器端与客户端通信的实例
Feb 19 Python
Python tornado队列示例-一个并发web爬虫代码分享
Jan 09 Python
python opencv之SURF算法示例
Feb 24 Python
Django 使用logging打印日志的实例
Apr 28 Python
python 通过 socket 发送文件的实例代码
Aug 14 Python
python安装numpy和pandas的方法步骤
May 27 Python
Django-Model数据库操作(增删改查、连表结构)详解
Jul 17 Python
Python  Django 母版和继承解析
Aug 09 Python
python线程定时器Timer实现原理解析
Nov 30 Python
python 字典套字典或列表的示例
Dec 16 Python
python实现Oracle查询分组的方法示例
Apr 30 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
Aug 04 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简单实现模拟登陆功能示例
2017/09/15 PHP
PHP进阶学习之依赖注入与Ioc容器详解
2019/06/19 PHP
Firefox outerHTML实现代码
2009/06/04 Javascript
使用JavaScript库还是自己写代码?
2010/01/28 Javascript
基于JQuery 的消息提示框效果代码
2011/07/31 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
JavaScript实现同步于本地时间的动态时间显示方法
2015/02/02 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
jquery日历插件datepicker用法分析
2016/01/22 Javascript
jQuery实现右键菜单、遮罩等效果代码
2016/09/27 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
Move.js入门
2017/02/08 Javascript
JS验证input输入框(字母,数字,符号,中文)
2017/03/23 Javascript
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
vue keep-alive请求数据的方法示例
2018/05/16 Javascript
Node.js中的child_process模块详解
2018/06/08 Javascript
微信小程序scroll-view实现字幕滚动
2018/07/14 Javascript
Vue项目中最新用到的一些实用小技巧
2018/11/06 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
解决layui的使用以及针对select、radio等表单组件不显示的问题
2019/09/05 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
2020/03/23 Javascript
[00:35]可解锁地面特效
2018/12/20 DOTA
举例讲解Python的Tornado框架实现数据可视化的教程
2015/05/02 Python
Python 通配符删除文件的实例
2018/04/24 Python
怎样有效的进行自我评价
2013/10/06 职场文书
趣味活动策划方案
2014/02/08 职场文书
竞聘书格式及范文
2014/03/31 职场文书
ktv筹备计划书
2014/05/03 职场文书
心理咨询专业自荐信
2014/07/07 职场文书
党员一帮一活动总结
2014/07/08 职场文书
单位授权委托书范文
2014/08/02 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
CSS 一行代码实现头像与国旗的融合
2021/10/24 HTML / CSS