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中用max()方法求最大值的介绍
May 15 Python
Python网络爬虫神器PyQuery的基本使用教程
Feb 03 Python
DataFrame 将某列数据转为数组的方法
Apr 13 Python
Python3中详解fabfile的编写
Jun 24 Python
Python2和Python3.6环境解决共存问题
Nov 09 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
Dec 03 Python
Python: 传递列表副本方式
Dec 19 Python
Python如何测试stdout输出
Aug 10 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
Dec 04 Python
java字符串格式化输出实例讲解
Jan 06 Python
Python实现提取PDF简历信息并存入Excel
Apr 02 Python
python中pymysql包操作数据库方法
Apr 19 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通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
JavaScript 中的事件教程
2007/04/05 Javascript
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
用js实现输入提示(自动完成)的实例代码
2013/06/14 Javascript
Js操作树节点自动折叠展开的几种方法
2014/05/05 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
JavaScript中的bold()方法使用详解
2015/06/08 Javascript
基于JavaScript代码实现自动生成表格
2016/06/15 Javascript
jQuery实现邮箱下拉列表自动补全功能
2016/09/08 Javascript
如何判断出一个js对象是否一个dom对象
2016/11/24 Javascript
AngularJS中使用ngModal模态框实例
2017/05/27 Javascript
Angular实现下拉框模糊查询功能示例
2018/01/03 Javascript
Vue.directive()的用法和实例详解
2018/03/04 Javascript
详解vue组件开发脚手架
2018/06/15 Javascript
重新认识vue之事件阻止冒泡的实现
2018/08/02 Javascript
详解Vue之父子组件传值
2019/04/01 Javascript
解决微信小程序调用moveToLocation失效问题【超简单】
2019/04/12 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
Vue组件跨层级获取组件操作
2020/07/27 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
[02:39]我与DAC之Newbee.Moogy:从论坛到TI
2018/03/26 DOTA
python生成随机验证码(中文验证码)示例
2014/04/03 Python
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
python 中split 和 strip的实例详解
2017/07/12 Python
对python中GUI,Label和Button的实例详解
2019/06/27 Python
Python实现的统计文章单词次数功能示例
2019/07/08 Python
python爬虫增加访问量的方法
2019/08/22 Python
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
会计专业毕业生自我鉴定
2013/10/29 职场文书
售后求职信范文
2014/03/15 职场文书
党委干部批评与自我批评发言稿
2014/09/28 职场文书
家庭财产分割协议范文
2014/11/24 职场文书
golang 实现菜单树的生成方式
2021/04/28 Golang
Java使用jmeter进行压力测试
2021/07/09 Java/Android