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 基础学习第二弹 类属性和实例属性
Aug 27 Python
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
May 02 Python
Django中使用locals()函数的技巧
Jul 16 Python
python中list列表的高级函数
May 17 Python
python爬虫爬取淘宝商品信息
Feb 23 Python
Python 记录日志的灵活性和可配置性介绍
Feb 27 Python
python 去除txt文本中的空格、数字、特定字母等方法
Jul 24 Python
深入了解python中元类的相关知识
Aug 29 Python
浅谈python 中的 type(), dtype(), astype()的区别
Apr 09 Python
浅谈python处理json和redis hash的坑
Jul 16 Python
python sleep和wait对比总结
Feb 03 Python
Python实现滑雪小游戏
Sep 25 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读取xml实例代码
2010/01/28 PHP
详解PHP中strlen和mb_strlen函数的区别
2014/03/07 PHP
php获取随机数组列表的方法
2014/11/13 PHP
用javascript做拖动布局的思路
2008/05/31 Javascript
40款非常棒的jQuery 插件和制作教程(系列一)
2011/10/26 Javascript
jQuery动态地获取系统时间实现代码
2013/05/24 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
2014/02/21 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
JS实现复制内容到剪贴板功能兼容所有浏览器(推荐)
2016/06/17 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
require.js配合插件text.js实现最简单的单页应用程序
2016/07/12 Javascript
AngularJs $parse、$eval和$observe、$watch详解
2016/09/21 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
js/jq仿window文件夹移动/剪切/复制等操作代码
2017/03/08 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
微信小程序页面间跳转传参方式总结
2019/06/13 Javascript
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
js代码实现轮播图
2020/05/04 Javascript
Python实现配置文件备份的方法
2015/07/30 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
2020/02/22 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
2013/11/07 HTML / CSS
美国知名的家庭连锁百货商店:Boscov’s
2017/07/27 全球购物
澳大利亚在线生活方式商店:Mytopia
2018/07/08 全球购物
初中同学聚会邀请函
2014/02/03 职场文书
《明天,我们毕业》教学反思
2014/04/24 职场文书
银行员工犯错检讨书
2014/09/16 职场文书
公司离职证明标准格式
2014/11/18 职场文书
个人党性分析材料
2014/12/19 职场文书
皇城相府导游词
2015/02/06 职场文书
电信营业员岗位职责
2015/04/14 职场文书