python实现图片批量压缩


Posted in Python onApril 24, 2021

项目中大量用到图片加载,由于图片太大,加载速度很慢,因此需要对文件进行统一压缩

第一种

 一:安装包

python -m pip install Pillow

二:导入包

from PIL import Image
import os

三:获取图片文件的大小

def get_size(file):
    # 获取文件大小:KB
    size = os.path.getsize(file)
    return size / 1024

四:输出文件夹下的文件

dir_path = r'file_path'
items = os.listdir(dir_path)

for item in items:
    # print(item)
    path = os.path.join(dir_path, item)
    print(item)

五:压缩文件到指定大小,我期望的是150KB,step和quality可以修改到最合适的数值

def compress_image(infile, outfile=None, mb=150, step=10, quality=80):
    """不改变图片尺寸压缩到指定大小
    :param infile: 压缩源文件
    :param outfile: 压缩文件保存地址
    :param mb: 压缩目标,KB
    :param step: 每次调整的压缩比率
    :param quality: 初始压缩比率
    :return: 压缩文件地址,压缩文件大小
    """
    if outfile is None:
        outfile = infile
    o_size = get_size(infile)
    if o_size <= mb:
        im = Image.open(infile)
        im.save(outfile)

    while o_size > mb:
        im = Image.open(infile)
        im.save(outfile, quality=quality)
        if quality - step < 0:
            break
        quality -= step
        o_size = get_size(outfile)

六:修改图片尺寸,如果同时有修改尺寸和大小的需要,可以先修改尺寸,再压缩大小

def resize_image(infile, outfile='', x_s=800):
    """修改图片尺寸
    :param infile: 图片源文件
    :param outfile: 重设尺寸文件保存地址
    :param x_s: 设置的宽度
    :return:
    """
    im = Image.open(infile)
    x, y = im.size
    y_s = int(y * x_s / x)
    out = im.resize((x_s, y_s), Image.ANTIALIAS)

    out.save(outfile)

七:运行程序

if __name__ == '__main__':
                      # 源路径      # 压缩后路径
    compress_image(r"file_path", r"E:\docs\2.JPG")
                    # 源路径      # 压缩后路径
    resize_image(r"file_path", r"E:\docs\3.JPG")

第二种

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协程用法实例分析
Jun 04 Python
Python+微信接口实现运维报警
Aug 27 Python
python opencv 图像尺寸变换方法
Apr 02 Python
python3+PyQt5使用数据库窗口视图
Apr 24 Python
解决python写入mysql中datetime类型遇到的问题
Jun 21 Python
Python小游戏之300行代码实现俄罗斯方块
Jan 04 Python
Python Matplotlib实现三维数据的散点图绘制
Mar 19 Python
centos7之Python3.74安装教程
Aug 15 Python
python超时重新请求解决方案
Oct 21 Python
python字符串,元组,列表,字典互转代码实例详解
Feb 14 Python
Python 之 Json序列化嵌套类方式
Feb 27 Python
Python3 搭建Qt5 环境的方法示例
Jul 16 Python
如何用python绘制雷达图
两行代码解决Jupyter Notebook中文不能显示的问题
python基础详解之if循环语句
Apr 24 #Python
解决jupyter notebook图片显示模糊和保存清晰图片的操作
Jupyter notebook 输出部分显示不全的解决方案
Apr 24 #Python
Python opencv缺陷检测的实现及问题解决
解决jupyter notebook启动后没有token的坑
You might like
PHP去掉从word直接粘贴过来的没有用格式的函数
2012/10/29 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
2014/06/21 PHP
php实现的发送带附件邮件类实例
2014/09/22 PHP
PHP多线程类及用法实例
2014/12/03 PHP
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
js获取浏览器基本信息大全
2014/11/27 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
javascript中定义类的方法详解
2015/02/10 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
2017/02/17 Javascript
angular+webpack2实战例子
2017/05/23 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
2019/06/18 Javascript
js神秘的电报密码 哈弗曼编码实现
2019/09/10 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
Vue是怎么渲染template内的标签内容的
2020/06/05 Javascript
Python3搜索及替换文件中文本的方法
2015/05/22 Python
利用Python爬取可用的代理IP
2016/08/18 Python
Python import与from import使用及区别介绍
2018/09/06 Python
Python之NumPy(axis=0 与axis=1)区分详解
2019/05/27 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
python射线法判断检测点是否位于区域外接矩形内
2019/06/28 Python
基于python实现地址和经纬度转换
2020/05/19 Python
HTML5实现的震撼3D焦点图动画的示例代码
2019/09/26 HTML / CSS
应届毕业生专业个人求职自荐信格式
2013/11/20 职场文书
党员创先争优承诺书
2014/03/26 职场文书
幼儿园健康教育方案
2014/06/14 职场文书
环境卫生倡议书
2014/08/29 职场文书
暑假学习心得体会
2014/09/02 职场文书
廉政承诺书
2015/01/19 职场文书
煤矿百日安全活动总结
2015/05/07 职场文书
2015年电话客服工作总结
2015/05/18 职场文书
疾病证明书
2015/06/19 职场文书
用python实现监控视频人数统计
2021/05/21 Python
python APScheduler执行定时任务介绍
2022/04/19 Python