【代码】Python3|用Python PIL压缩图片至指定大小,并且不自动旋转
代码主体是GPT帮我写的,我觉得这个功能非常实用。
解决自动旋转问题参考:一行代码解决PIL/OpenCV读取图片出现自动旋转的问题,增加一行代码image = ImageOps.exif_transpose(image)
即可恢复正常角度。
from PIL import Image, ImageOps
def compress_image(input_path, output_path, max_size=(400, 400)):
"""
压缩图像为指定大小,并保存到指定路径。
参数:
input_path: 输入图像文件路径
output_path: 输出图像文件路径
max_size: 最大尺寸 (宽, 高),默认为 (400, 400)
"""
try:
# 打开图像文件
image = Image.open(input_path)
# 修正图片旋转问题
image = ImageOps.exif_transpose(image)
# 缩放图像到指定大小
image.thumbnail(max_size)
# 检查输出文件夹是否存在
output_dir = os.path.dirname(output_path)
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 保存缩略图
image.save(output_path)
# print(f"已将图像压缩并保存到 {output_path}")
except Exception as e:
print(f"压缩图像时出错: {e}")
应用实例如下:
import os
import json
from time import sleep
def compress_images_from_json(json_file, input_folder, output_folder):
"""
从 JSON 文件中读取图像文件路径,然后压缩这些图像文件。
参数:
json_file: JSON 文件路径
input_folder: 输入文件夹路径
output_folder: 输出文件夹路径
"""
try:
with open(json_file, "r") as f:
images_json = json.load(f)
images = images_json.get("images", [])
# 递归获取output_folder下的所有文件并以/拼接,删除不存在于images.json中的图片
for root, dirs, files in os.walk(output_folder):
for file in files:
if os.path.join(root, file).replace(output_folder + "/", "") not in images:
os.remove(os.path.join(root, file))
# 压缩图片
for image in images:
input_path = os.path.join(input_folder, image)
output_path = os.path.join(output_folder, image)
compress_image(input_path, output_path)
except Exception as e:
print(f"从 JSON 文件中读取图像文件路径并压缩时出错: {e}")
if __name__ == "__main__":
file_dir = os.path.dirname(os.path.abspath(__file__))
input_folder = file_dir
output_folder = os.path.join(file_dir, "compressed_photos")
json_file = os.path.join(file_dir, "images.json")
while True:
compress_images_from_json(json_file, input_folder, output_folder)
print("已压缩所有图像。")
sleep(5) # 每5秒压缩一次图像
该代码会每五秒读取images.json内容,将其中的图片进行压缩,压缩后的图片保存在compressed_photos文件夹中。images.json文件格式如下:
{
"images": [
"photos/1.jpg",
]
}
本账号所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/qq_46106285/article/details/138030475。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2022-04-21 【HUST】网安|计算机网络安全实验|实验二 DNS协议漏洞利用实验