使用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提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...
随机推荐
- vue 各种打包坑
1,报错 Refused to load the image 'http://localhost:8080/favicon.ico' because it violates the following ...
- 学习go第一天-编写第一个go程序
开发环境构建 GOPATH 在1.8版本前必须设置这个环境变量 1.8以及更高版本如果没有设置,则使用默认值在Mac上GOPATH可以通过修改 -/.bash_profile来设置 程序基本结构 pa ...
- 香港6合彩数据分析 V1.0
最近写了个VBA小工具,分析香港6合彩中奖的概率,得出的结果不尽人意,但至少不会让你赔钱,嘿嘿! 点此链接获取 密码:3u65
- nitacm第十六届浙江大学宁波理工学院程序设计大赛总结
校赛时间:2019.11.30周六下午12:00-16:00 重现赛链接:https://ac.nowcoder.com/acm/contest/2995#question 体验: 11点多到达石鳞大 ...
- HDU1847 Good Luck In CET4 Everybody
大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此.当然,作为在考场浸润了十几载的当代大学生,Kiki和Cici更懂得考 ...
- CSUOJ 1952 合并石子
现在有n堆石子,第i堆有ai个石子.现在要把这些石子合并成一堆,每次只能合并相邻两个,每次合并的代价是两堆石子的总石子数.求合并所有石子的最小代价. Input 第一行包含一个整数T(T<=50 ...
- 基于iCamera测试mt9m034 1280X960 高动态相机模块小结
基于iCamera测试mt9m034 高动态相机模块小结 首先看看此模块的特性 mt9m034 高动态 CMOS模块 1280*960像素 5.48 V/lux-sec >115db 摄像头模块 ...
- margin重叠与穿透问题
margin重叠是指两个同级元素之间.margin穿透指的是,子元素margin超出父元素而未被父元素包含的现象. 出现margin重叠的原因: 同一个BFC里面两个块级元素会出现margin折叠. ...
- Django 05
目录 配置测试脚本文件 单表操作 增加数据 查询数据 修改数据 删除数据 查询十三太保 双下划线查询 连表下的数据增删改 一对多/一对一 多对多 跨表查询 基本对象的跨表查询 (子查询) 基于双下划线 ...
- 【Webpack】315- 手把手教你搭建基于 webpack4 的 vue2 多页应用
背景 前司和现司都会存在这种业务场景:有很多 H5 页面是不相关的,如果使用 SPA 的话,对于很多落地页和活动页不太友好,有一些纯前端页面加载过慢,所以就萌生了创建一个多页面 MPA 的框架. 起初 ...