【代码】Python3|用Python PIL压缩图片至指定大小,并且不自动旋转

embedded/2024/10/22 17:17:26/

文章目录

    • 前言
    • 参考
    • 用于压缩图片的函数
    • 函数调用实例
      • 1 代码
      • 2 结果

前言

代码主体是GPT帮我写的,我觉得这个功能非常实用。

参考

解决自动旋转问题参考:一行代码解决PIL/OpenCV读取图片出现自动旋转的问题,增加一行代码image = ImageOps.exif_transpose(image) 即可恢复正常角度。

用于压缩图片的函数

python">from PIL import Image, ImageOpsdef 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}")

函数调用实例

1 代码

该代码会每五秒读取images.json内容,将其中的图片进行压缩,压缩后的图片保存在compressed_photos文件夹中。images.json文件格式如下:

{"images": ["photos/1.jpg",       ]
}

完整代码如下:

python">import os
import json
from time import sleepdef 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_diroutput_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秒压缩一次图像

2 结果

运行结果:

在这里插入图片描述

本账号所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/qq_46106285/article/details/138030475。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。


http://www.ppmy.cn/embedded/16104.html

相关文章

猫头虎分享已解决Error || 已解决error: subprocess-exited-with-error

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

网络基础(1)

文章目录 1. 网络基础1.1 网络协议1.1.1 OSI七层模型 1.3 网络中的地址管理 2. 套接字编程2.1 源IP地址和目的IP地址2.3 socket编程接口2.3.2 sockaddr结构2.2.3 UDPecho服务器2.24 netstat2.25 远程执行命令 1. 网络基础 1.1 网络协议 1.1.1 OSI七层模型 OSI(Op…

智能合约语言(eDSL)—— wasmtime实现合约引擎补充

1、链上下文 由于我们是应用到区块链中,所以我们需要把链的环境传递给wasmtime,这样wasmtime在运行合约的时候,就可以获取到链上数据;我们运行合约当时的环境,打包成一个变量context,传递给wasmtime。conte…

Java虚拟机(jvm)常见问题总结

1.电脑怎样认识我们编写的Java代码 首先先了解电脑是二进制的系统,他只认识 01010101比如我们经常要编写 HelloWord.java 电脑是怎么认识运行的HelloWord.java是我们程序员编写的,我们人可以认识,但是电脑不认识 Java文件编译的过程 1. 程…

【docker 】docker-compose 部署mongoDB

在notepad中将格式改为UNIX (编辑》文档格式转化》转为Unix),编码改为UTF-8 ( 编码》转为UTF-8),改好后如图 新建启动脚本 mongo.sh #!/bin/bash # 挂载路径 DATA_DIR/opt/docker-data/mongodb/data LOG_…

Java中使用Graphics2D绘制字符串文本自动换行 算法

效果: 代码: /*** return void* Author xia* Description //TODO 写字换行算法* Date 18:08 2021/4/1* Param []**/private static void drawWordAndLineFeed(Graphics2D g2d, Font font, String words, int wordsX, int wordsY, int wordsWidth) {FontD…

Git ignore、exclude for TortoiseGit 小结

1.Ignore Type:忽略类型,也即忽略规则,如何去忽略文件? 1.1.Ignore item(s) only in containing folder(s):仅忽略在包含在文件夹中项目。 仅忽略该文件夹下选定的patterns。the patterns其实就是文件类型,比如.txt后…

前端H5动态背景登录页面(下)

最近正好有点儿时间,把之前没整理完的前端动态背景登录页面给整理一下!这是之前的连接前端H5动态背景登录页面(上),这主要是两个登陆页面,一个彩色气泡,一个动态云朵,感兴趣的可以点…