代码主体是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。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

【代码】Python3|用Python PIL压缩图片至指定大小,并且不自动旋转的更多相关文章

  1. Python,PIL压缩裁剪图片

    自己写了用来压缩 DC 照片的,批量处理整目录文件,非常方便.需要安装 PIL #!/usr/bin/env python import Image import os import os.path ...

  2. C# 压缩图片到指定宽度,假如图片小于指定宽度 判断图片大小是否大于指定大小(KB) 如果大于则压缩图片质量 宽高不变

    class Program { static void Main(string[] args) {//G:\zhyue\backup\projects\Test\ConsoleApplication1 ...

  3. < python PIL - 批量图像处理 - 生成自定义大小图像 >

    < python PIL - 批量图像处理 - 生成自定义大小图像 > 直接用python自带的PIL图像库,对一个文件夹下所有jpg/png的图像进行自定义像素变换 from PIL i ...

  4. 等比例压缩图片到指定的KB大小

    基本原理: 取原来的图片,长宽乘以比例,重新生成一张图片,获取这张图片的大小,如果还是超过预期大小,继续在此基础上乘以压缩比例,生成图片,直到达到预期 /** * @获取远程图片的体积大小 单位byt ...

  5. tinypng的python批量压缩图片功能

    tinypng网站提供的图片压缩功能很不错,但是直接在网站上压缩有限制,大量压缩图片时比较麻烦,还好官方提供了很多脚本的自动化压缩接口.下面简单说下python批量压缩步骤. 1.申请api key ...

  6. Python PIL Image图片显示系列

    1. PIL Image图片显示 在使用PIL函数中的Image方法读取图片时,对于图片的shape,可能有不少宝宝存在疑惑.是什么疑惑了?就是image = Image.open(image_pat ...

  7. PHP JS HTML ASP页面跳转代码 延时跳转代码 返回到上一界面并刷新 JS弹出指定大小的新窗口

    1.PHP延时跳转代码 //跳转到浏览界面 header("Refresh:1;url=machine_list.php"); //不延时 <?php header(&quo ...

  8. CSS- 控制图片显示指定大小 并超过大小自动缩小

    有时候利用css比较方便控制网页html中img图片的显示大小.这样也省得自己一个一个去定义. img,a img{ border:; margin:; padding:; max-width:600 ...

  9. 纯代码系列:Python实现验证码图片(PIL库经典用法用法,爬虫12306思路)

    现在的网页中,为了防止机器人提交表单,图片验证码是很常见的应对手段之一.这里就不详细介绍了,相信大家都遇到过. 现在就给出用Python的PIL库实现验证码图片的代码.代码中有详细注释. #!/usr ...

  10. python使用PIL压缩图片

    import Image import os import os.path import sys path = sys.argv[1] small_path = (path[:-1] if path[ ...

随机推荐

  1. AI 如何重塑劳动力市场:基于 Claude 数据的深度分析

    前言 本文翻译自 Anthropic 今天发布的 The Anthropic Economic Index ,经济指数报告,这份报告基于 Claude 的数据对目前的 AI 使用情况做了汇总. 引言 ...

  2. Spring默认BeanName

    先说结论: 1.XML配置和注解生成默认BeanName的机制是不同的 2.XML配置默认BeanName = 全类名 + # + 数字,如 com.anyway.p2024.service.impl ...

  3. 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!

    在AI技术飞速发展的今天,大语言模型(LLM)的应用越来越广泛,但高昂的使用成本常常让个人开发者和小型团队望而却步.今天,我要为大家介绍一个非常实用的开源项目--DeepSeek-Free-API,它 ...

  4. Arduino语法--运算符

    本节介绍最常用的一些Arduino运算符,包括赋值运算符.算数运算符.关系运算符.逻辑运算符和递增/减运算符. 一. 赋值运算符 =(等于)为指定某个变量的值,例如:A=x,将x变量的值放入A变量. ...

  5. Linux - 批量清除失效软连接

    红底白字,并且一闪一闪的都是失效的软连接,需要批量清除它们... 1.打印所有失效软连接 find ./* -type l -exec test ! -e {} \; -exec echo {} \; ...

  6. 数据挖掘 | 数据隐私(4) | 差分隐私 | 差分隐私概论(下)(Intro to Differential Privacy 2)

    L4-Intro to Differential Privacy 拉普拉斯机制(Laplace Mechanism) 上一节课中,我们讨论了随机响应,这是一种适合于单个位的隐私化.这种算法一般来说并不 ...

  7. 【配置化】C# dapper是怎么实现的?精短ORM

    目录 一.什么是dapper 二.实现问题与思路 & 源码参考 三.小结 一.什么是dapper dapper是个组件,一个dll文件,可以通过NuGet下载. 作用:快速访问数据库并自动完成 ...

  8. .NET 9.0 全栈技术的高效开源低代码平台(Vue3+Element-Plus)

    前言 推荐一款基于.NET 9.0 全栈框架的新一代技术架构(Vue3+Element-Plus),开源低代码平台-Microi吾码. 平台不仅无限制地支持用户数.表单数.数据量及数据库数量,还通过跨 ...

  9. 华为平板+Zotero+Xodo+坚果云+Zotfile+Zotero OCR,实现论文笔记平板手写+Win自动生成,补充官方教程

    需要的硬件,软件,插件和实现的最终效果,rt. 1. Win,下载Zotero,坚果云 下载网址:https://www.zotero.org/download/ 版本:Zotero 6.如果是其他版 ...

  10. mac zsh终端 goframe gf 别名冲突

    前言 如果你使用的是 zsh 终端,可能会存在 gf 别名冲突( git fetch 快捷指令) 解决 终端运行 alias gf=gf,gf 工具会自动修改 .zshrc 中的别名设置,source ...