使用Python轻松批量压缩图片
在互联网,图片的大小对一个网站的响应速度有着明显的影响,因此在提供用户预览的时候,图片往往是使用压缩后的。如果一个网站图片较多,一张张压缩显然很浪费时间。那么接下来,我就跟大家分享一个批量压缩图片的方法,只需几行python代码,即可轻松实现图片压缩。

压缩算法
用到PIL库,PIL是Python平台事实上的图像处理标准库,支持多种格式,并提供强大的图形与图像处理功能。使用如下命令安装:
pip install pillow
代码如下:
#图片压缩批处理
def compressImage(srcPath,dstPath):
    for filename in os.listdir(srcPath):
        #如果不存在目的目录则创建一个,保持层级结构
        if not os.path.exists(dstPath):
                os.makedirs(dstPath)
        #拼接完整的文件或文件夹路径
        srcFile=os.path.join(srcPath,filename)
        dstFile=os.path.join(dstPath,filename)
        # 如果是文件就处理
        if os.path.isfile(srcFile):
            try:
                #打开原图片缩小后保存,可以用if srcFile.endswith(".jpg")或者split,splitext等函数等针对特定文件压缩
                sImg=Image.open(srcFile)
                w,h=sImg.size
                dImg=sImg.resize((int(w/2),int(h/2)),Image.ANTIALIAS)  #设置压缩尺寸和选项,注意尺寸要用括号
                dImg.save(dstFile) #也可以用srcFile原路径保存,或者更改后缀保存,save这个函数后面可以加压缩编码选项JPEG之类的
                print (dstFile+" 成功!")
            except Exception:
                print(dstFile+"失败!")
        # 如果是文件夹就递归
        if os.path.isdir(srcFile):
            compressImage(srcFile, dstFile)
方法调用
1.在该python文件所在目录新建三个目录,prepare(存放待压缩图片)、finish(压缩完成的原图)和compress(存放压缩后的图片)
2.遍历prepare目录,将图片移动到finish目录
3.遍历compress目录删除压缩图片
4.将finish中的图片全部进行压缩,对应存到compress目录
if __name__ == '__main__':
    # 遍历待加入图片
    path = os.walk("./prepare")
    for root, dirs, files in path:
        for f in files:
            shutil.move(os.path.join(root,f),os.path.join('./finish',f))                #移动文件
    # 遍历删除压缩图片
    path = os.walk("./compress")
    for root, dirs, files in path:
        for f in files:
            os.remove(os.path.join(root, f))
    # 压缩图片
    compressImage("./finish","./compress")
完整代码
新建photo.py,复制如下代码
from PIL import Image
import os,shutil
#图片压缩批处理
def compressImage(srcPath,dstPath):
    for filename in os.listdir(srcPath):
        #如果不存在目的目录则创建一个,保持层级结构
        if not os.path.exists(dstPath):
                os.makedirs(dstPath)
        #拼接完整的文件或文件夹路径
        srcFile=os.path.join(srcPath,filename)
        dstFile=os.path.join(dstPath,filename)
        # 如果是文件就处理
        if os.path.isfile(srcFile):
            try:
                #打开原图片缩小后保存,可以用if srcFile.endswith(".jpg")或者split,splitext等函数等针对特定文件压缩
                sImg=Image.open(srcFile)
                w,h=sImg.size
                dImg=sImg.resize((int(w/2),int(h/2)),Image.ANTIALIAS)  #设置压缩尺寸和选项,注意尺寸要用括号
                dImg.save(dstFile) #也可以用srcFile原路径保存,或者更改后缀保存,save这个函数后面可以加压缩编码选项JPEG之类的
                print (dstFile+" 成功!")
            except Exception:
                print(dstFile+"失败!")
        # 如果是文件夹就递归
        if os.path.isdir(srcFile):
            compressImage(srcFile, dstFile)
if __name__ == '__main__':
    # 遍历待加入图片
    path = os.walk("./prepare")
    for root, dirs, files in path:
        for f in files:
            shutil.move(os.path.join(root,f),os.path.join('./finish',f))                #移动文件
    # 遍历删除压缩图片
    path = os.walk("./compress")
    for root, dirs, files in path:
        for f in files:
            os.remove(os.path.join(root, f))
    # 遍历压缩图片
    compressImage("./finish","./compress")
最后,大家只要把要压缩的图片放入prepare目录,然后执行photo.py即可。
使用Python轻松批量压缩图片的更多相关文章
- 10 行 Python 代码,批量压缩图片 500 张,简直太强大了
		
本文原创并首发于公众号[Python猫],未经授权,请勿转载. 原文地址:https://mp.weixin.qq.com/s/5hpFDgjCpfb0O1Jg-ycACw 熟悉 "Pyth ...
 - tinypng的python批量压缩图片功能
		
tinypng网站提供的图片压缩功能很不错,但是直接在网站上压缩有限制,大量压缩图片时比较麻烦,还好官方提供了很多脚本的自动化压缩接口.下面简单说下python批量压缩步骤. 1.申请api key ...
 - C# Winform版批量压缩图片程序
		
需求 上周,领导给我分配了一个需求:服务器上的图片文件非常大,每天要用掉两个G的大小的空间,要做一个自动压缩图片的工具处理这些大图片.领导的思路是这样的: 1)打开一个图片,看它的属性里面象素是多少, ...
 - 【Python】批量给图片增加水印工具
		
背景 最近有一些图片需要增加水印,找了一圈也没看见比较好的工具,又不想用破解的PS,干脆自己做了一个GUI工具,有需要的同学自取 功能 支持水印预览 自定义水印文字内容 支持行楷和微软雅黑两种字体 支 ...
 - python实现批量压缩文件夹
		
前段时间碰到一个需要把目录下文件夹压缩的项目,但是度娘里没找到,只好自己写脚本了. #coding:utf-8 import os filePath = raw_input("请输入路径:& ...
 - python使用PIL压缩图片
		
import Image import os import os.path import sys path = sys.argv[1] small_path = (path[:-1] if path[ ...
 - Python之批量改变图片大小
		
image_pylib模块:https://github.com/huangshiyu13/image_pylib data_engine模块:https://github.com/huangshiy ...
 - 用Photoshop软件实现批量压缩照片
		
前提:手头有 "大" 照片,出于某种原因想把它变成 "小" 照片:电脑刚好安装有PS软件. 需知:如果您的压缩需求仅限于降低图片品质,降低图片像素,那么建议您采 ...
 - java上传图片并压缩图片大小
		
Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...
 
随机推荐
- SpringBoot项目创建与第一个SSM项目示例
			
本节介绍SpringBoot创建第一个示例SSM项目的完整过程,使用工具STS,与IDEA操作基本类似. 示例代码在:https://github.com/laolunsi/spring-boot-e ...
 - ios 测试网络是否连接
			
转自:http://blog.csdn.net/lwq421336220/article/details/16982857 - (BOOL) connectedToNetwork { //创建零地址, ...
 - Java修炼——Set的子接口Vector的方法使用
			
Vector的方法和ArrayList相似 package com.bjsxt.Array; import java.util.Iterator; import java.util.List; imp ...
 - OA思维导图(第一次画)
 - zabbix4.0.1 安装部署
			
zabbix安装部署 目录 一.环境准备... 3 1.1.版本:... 3 1.2.部署环境... 3 二.安装部署... 3 2.1.zabbix安装... 3 2.1.1.下载zabbix的rp ...
 - usb2.0高速视频采集之68013A寄存器配置说明
			
任何的固件编程离不开与与原理图参考,图纸中所采用的是USB的Slave_fifo传输方式,具体配置与图纸对应即可. •USB_IFCLK:同步Slave_FIFO模式,输入频率范围5M-48M,在FP ...
 - table内容保存到Excel中
			
@{ Layout = null; } <html> <head> <title></title> </head> <body> ...
 - MarkDown快速入门(typora)
			
MarkDown快速入门(typora) 1.代码块: //代码块语法: ```java ```shell 1.java代码 package com.yjx.jdbc import java.sq ...
 - Linux之find命令操作技巧
			
一.前言 工作中,我们常用find命令查找某些文件或者删除一些旧的日志文件,所以学会find命令的操作技巧就极为重要. 二.find常用参数选项 -depth 从指定目录下最深层的子目录开始查找 -m ...
 - SSM非springboot配置swagger2
			
前提:maven,ssm,不是springboot项目 1.在maven中添加依赖 <!-- Swagger2 Begin --> <!--springfox的核心jar包--> ...