最近疫情反复,堂姐被抽调到宣传部门发些稿件,发布平台总是要求图片上传必须为2M以下,堂姐是个电脑盲,刚好最近在看入门Python的文章,写个压缩同目录下图片到2M的程序给她,她只要把程序放到有图片的文件夹里运行就好了。我在这里记录分享下制作过程。
打开PyCharm或者VScode,写下如下代码:
(大概思路就是先找当前文件夹下有没有图片格式的文件,有的话就取出文件路径,然后按比例和质量循环不断压缩它,直到它小于2M大小,然后就创建个压缩后图片的文件夹,把压缩好的图片放进去,如果图片本身就小于2M那么就直接放到压缩后图片文件夹,这样压缩完直接把压缩后图片文件夹拷走就行了。)
import shutil
from PIL import Image
import os
from PIL.Image import Resampling
# 尺寸比例
size_ratio = 0.9
# 压缩质量
quality = 90
# 遍历文件夹压缩
def batch_compress(src_path, dist_path):
# 遍历文件夹
for filename in os.listdir(src_path):
# 目录验证
if not os.path.exists(dist_path):
os.makedirs(dist_path)
# 拼接完整的文件或文件夹路径
src_file = os.path.join(src_path, filename)
dist_file = os.path.join(dist_path, filename)
# 如果是文件 就调用压缩
if os.path.isfile(src_file):
if is_image(src_file):
# 执行压缩操作
compression(src_file, dist_file)
else:
print(dist_file + " 文件不是图片,跳过!")
# 如果是文件夹 就继续递归
elif os.path.isdir(src_file):
batch_compress(src_file, dist_file)
# 获取文件大小:KB
def get_size(src_file):
size = os.path.getsize(src_file)
return int(size / 1024)
# 文件是否为图片判断
def is_image(src_file):
if (src_file.lower().endswith(
('.bmp', '.dib', '.gif', '.png', '.jpg', '.jpeg', '.pbm', '.pgm', '.ppm', '.tif', '.tiff'))):
return True
else:
return False
# 压缩图片并保存
def compression(src_file, dist_file):
try:
# 读取原图
src_img = Image.open(src_file)
w, h = src_img.size
# 重新设置图片尺寸和选项,Image.ANTIALIAS:平滑抗锯齿
# dist_img = src_img.resize((int(w * size_ratio), int(h * size_ratio)), Image.ANTIALIAS)
o_size = get_size(src_file)
msg = False
if o_size <= 2048:
shutil.copy(src_file, dist_file)
print(dist_file + " 无需压缩!")
while o_size > 2048:
dist_img = src_img.resize((int(w * size_ratio), int(h * size_ratio)), Resampling.LANCZOS)
# 保存为新图
dist_img.save(dist_file, quality=quality)
src_img = Image.open(dist_file)
w, h = src_img.size
o_size = get_size(dist_file)
msg = True
if msg:
print(dist_file + " 压缩成功!")
except Exception as e:
print(dist_file + " 压缩失败!异常信息:", e)
if __name__ == '__main__':
print("=================开始执行=================")
# 指定图片目录以及压缩后的图片目录
infile = os.getcwd()
outfile = os.path.join(infile, '压缩后图片')
batch_compress(infile, outfile)
print("=================执行结束=================")
源代码运行测试没问题,下面就是打包成可执行的程序,堂姐主要用windows系统办公,那么打包成exe可执行程序就可以了。
打包方式有多种,这里我选择pyinstaller
用pip装它(你电脑没有pip?进它官网下载去吧您訥:)pip · PyPIThe PyPA recommended tool for installing Python packages.https://pypi.org/project/pip/
装完您就打开cmd程序,运行
pip install pyinstaller
?装完您看它结尾处显示Successfully,那就是装上了;
然后您去网上找个您喜欢的ico格式的图片文件,放到py文件所在的目录,就可以开始打包了。
打开cmd,切换到py项目所在目录,运行如下命令(这里“ico.ico”是我找的图标文件,piczip.py是我的python文件)
pyinstaller -F -i ico.ico piczip.py
然后您就得到一个带着您选择图标的exe文件,把它放到您想批量压缩图片的文件夹里,双击就可以了。
不愿意搭建环境,只需要可执行程序的看这里:
压缩图片到2M.exe
?
|