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插入排序算法的实现代码
Nov 21 Python
Python中用字符串调用函数或方法示例代码
Aug 04 Python
Python生成器定义与简单用法实例分析
Apr 30 Python
python中ASCII码和字符的转换方法
Jul 09 Python
python用plt画图时,cmp设置方法
Dec 13 Python
python模块导入的方法
Oct 24 Python
Python如何使用字符打印照片
Jan 03 Python
Python使用uuid库生成唯一标识ID
Feb 12 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
Apr 03 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
Jun 29 Python
python 爬取免费简历模板网站的示例
Sep 27 Python
python热力图实现简单方法
Jan 29 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执行速度全攻略(上)
2006/10/09 PHP
php读取javascript设置的cookies的代码
2010/04/12 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
2013/06/24 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
PHP数据对象PDO操作技巧小结
2016/09/27 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
2012/08/24 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
2013/09/22 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
关于JS数组追加数组采用push.apply的问题
2014/06/09 Javascript
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
JavaScript简单表格编辑功能实现方法
2015/04/16 Javascript
基于html5和nodejs相结合实现websocket即使通讯
2015/11/19 NodeJs
jQuery深拷贝Json对象简单示例
2016/07/06 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
jQuery中将json数据显示到页面表格的方法
2018/05/27 jQuery
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
Vue 组件注册实例详解
2019/02/23 Javascript
通过实践编写优雅的JavaScript代码
2019/05/30 Javascript
Node爬取大批量文件的方法示例
2019/06/28 Javascript
解决Layui数据表格的宽高问题
2019/09/28 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
js 闭包深入理解与实例分析
2020/03/19 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
使用python绘制常用的图表
2016/08/27 Python
使用Python实现博客上进行自动翻页
2017/08/23 Python
python pandas模块基础学习详解
2019/07/03 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
python实现画图工具
2020/08/27 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
lookfantastic荷兰:在线购买奢华护肤、护发和化妆品
2018/11/27 全球购物
社区端午节活动总结
2015/02/11 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
Mysql中有关Datetime和Timestamp的使用总结
2021/12/06 MySQL