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 03 Python
Python字符和字符值(ASCII或Unicode码值)转换方法
May 21 Python
Python正则抓取网易新闻的方法示例
Apr 21 Python
详解Python使用tensorflow入门指南
Feb 09 Python
python集合常见运算案例解析
Oct 17 Python
python文件处理fileinput使用方法详解
Jan 02 Python
Python Tornado之跨域请求与Options请求方式
Mar 28 Python
Python如何实现的二分查找算法
May 27 Python
python“静态”变量、实例变量与本地变量的声明示例
Nov 13 Python
Pytorch数据读取之Dataset和DataLoader知识总结
May 23 Python
Python OpenCV实现图像模板匹配详解
Apr 07 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 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
php中设置多级目录session的问题
2011/08/08 PHP
php.ini save_handler 修改不生效的解决办法
2014/07/22 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
javascript 新浪背投广告实现代码
2009/07/07 Javascript
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
javascript自启动函数的问题探讨
2013/10/05 Javascript
jQuery将多条数据插入模态框的示例代码
2014/09/25 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
js实现表单提交后不重新刷新当前页面
2016/11/30 Javascript
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
2018/02/05 Javascript
Vue快速实现通用表单验证的示例代码
2020/01/09 Javascript
javascrpt密码强度校验函数详解
2020/03/18 Javascript
angular组件间传值测试的方法详解
2020/05/07 Javascript
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python复制文件代码实现
2013/12/23 Python
python登录豆瓣并发帖的方法
2015/07/08 Python
python2.x实现人民币转大写人民币
2018/06/20 Python
python utc datetime转换为时间戳的方法
2019/01/15 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
python opencv将表格图片按照表格框线分割和识别
2019/10/30 Python
Python unittest discover批量执行代码实例
2020/09/08 Python
解决Pymongo insert时会自动添加_id的问题
2020/12/05 Python
CSS3制作精致的照片墙特效
2016/06/07 HTML / CSS
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
现金会计岗位职责
2013/12/05 职场文书
房屋租赁授权委托书范本
2014/09/20 职场文书
优秀党员推荐材料
2014/12/18 职场文书
员工表扬信怎么写
2015/05/05 职场文书
企业安全生产检查制度
2015/08/06 职场文书
2016年“5.12”国际护士节活动总结
2016/04/06 职场文书
Python进度条的使用
2021/05/17 Python
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技