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的消息队列包SnakeMQ使用初探
Jun 29 Python
python使用TensorFlow进行图像处理的方法
Feb 28 Python
目前最全的python的就业方向
Jun 05 Python
Python Flask框架扩展操作示例
May 03 Python
将Pytorch模型从CPU转换成GPU的实现方法
Aug 19 Python
基于Python新建用户并产生随机密码过程解析
Oct 08 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
Oct 14 Python
python中的数组赋值与拷贝的区别详解
Nov 26 Python
Pytorch Tensor的统计属性实例讲解
Dec 30 Python
Keras - GPU ID 和显存占用设定步骤
Jun 22 Python
python boto和boto3操作bucket的示例
Oct 30 Python
python 图像增强算法实现详解
Jan 24 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获取百度收录、百度热词及百度快照的方法
2015/04/02 PHP
PHP利用APC模块实现大文件上传进度条的方法
2015/10/29 PHP
PHP哈希表实现算法原理解析
2020/12/11 PHP
向大师们学习Javascript(视频与PPT)
2009/12/27 Javascript
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
2012/06/18 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
2015/11/18 Javascript
javascript拖拽效果延伸学习
2016/04/04 Javascript
JavaScript 函数模式详解及示例
2016/09/07 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
GOJS+VUE实现流程图效果
2018/12/01 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
2019/10/31 Javascript
Vue实例的对象参数options的几个常用选项详解
2019/11/08 Javascript
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
python调用java模块SmartXLS和jpype修改excel文件的方法
2015/04/28 Python
python 对象和json互相转换方法
2018/03/22 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
Django stark组件使用及原理详解
2019/08/22 Python
Python打印特殊符号及对应编码解析
2020/05/07 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
HTML5利用约束验证API来检查表单的输入数据的代码实例
2016/12/20 HTML / CSS
Foreo国际站:Foreo International
2018/10/29 全球购物
银行实习鉴定
2013/12/13 职场文书
三好学生演讲稿范文
2014/04/26 职场文书
2014年端午节演讲稿范文
2014/05/23 职场文书
上海世博会志愿者口号
2014/06/17 职场文书
使用python向MongoDB插入时间字段的操作
2021/05/18 Python