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之做一个小游戏
Sep 28 Python
跟老齐学Python之不要红头文件(2)
Sep 28 Python
用Python进行TCP网络编程的教程
Apr 29 Python
Python3使用requests登录人人影视网站的方法
May 11 Python
python opencv 图像尺寸变换方法
Apr 02 Python
Python实现的ftp服务器功能详解【附源码下载】
Jun 26 Python
tensorflow 重置/清除计算图的实现
Jan 19 Python
利用keras加载训练好的.H5文件,并实现预测图片
Jan 24 Python
django orm模块中的 is_delete用法
May 20 Python
opencv 阈值分割的具体使用
Jul 08 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 21 Python
Python eval函数介绍及用法
Nov 09 Python
如何用python绘制雷达图
两行代码解决Jupyter Notebook中文不能显示的问题
python基础详解之if循环语句
Apr 24 #Python
解决jupyter notebook图片显示模糊和保存清晰图片的操作
Jupyter notebook 输出部分显示不全的解决方案
Apr 24 #Python
Python opencv缺陷检测的实现及问题解决
解决jupyter notebook启动后没有token的坑
You might like
PHP4中实现动态代理
2006/10/09 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
浅谈PHP错误类型及屏蔽方法
2017/05/27 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
PHP中一个有趣的preg_replace函数详解
2018/08/15 PHP
PHP实现的用户注册表单验证功能简单示例
2019/02/25 PHP
PHP文件类型检查及fileinfo模块安装使用详解
2019/05/09 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
三级下拉菜单的js实现代码
2011/05/23 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
JavaScript表单验证开发
2016/11/23 Javascript
js数字计算 误差问题的快速解决方法
2017/02/28 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
import与export在node.js中的使用详解
2017/09/28 Javascript
vue和webpack项目构建过程常用的npm命令详解
2018/06/15 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
原生JavaScript实现贪吃蛇游戏
2020/11/04 Javascript
基于Vue+Webpack拆分路由文件实现管理
2020/11/16 Javascript
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
python3学生名片管理v2.0版
2018/11/29 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
如何卸载python插件
2020/07/08 Python
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
材料物理专业大学毕业生求职信
2013/10/15 职场文书
大学生个人简历中的自我评价
2013/12/27 职场文书
新年联欢会主持词
2014/03/27 职场文书
外贸会计专业自荐信
2014/06/22 职场文书
2014年秘书工作总结
2014/11/25 职场文书
2016年党风廉政建设承诺书
2016/03/25 职场文书
2016年清明节期间群众祭祀活动工作总结
2016/04/01 职场文书
读《推着妈妈去旅行》有感1500字
2019/10/15 职场文书
python图片灰度化处理的几种方法
2021/06/23 Python
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js