
示例工程【免费下载链接】python-mini-projectsA collection of simple python mini projects to enhance your python skills项目地址https://gitcode.com/gh_mirrors/py/python-mini-projects点击查看免费下载导读本篇技术指南聚焦 python-mini-projects 仓库中的Terminal_progress_bar_with_images_resizing迷你项目讲解如何用tqdm在终端展示批量图片缩放任务的实时进度并用 Pillow 完成图片压缩缩放。读完本文你将掌握tqdm迭代器包装法的基本用法、Image.thumbnail()保持宽高比的缩放原理以及一套可直接复制运行的批量图片处理脚本并理解其输入输出约定与已知边界。项目定位与适用场景在 python-mini-projects 仓库的 projects 目录下Terminal_progress_bar_with_images_resizing是一个演示性极强的工具型迷你项目它的核心诉求不是如何缩放一张图片而是当脚本需要批量处理大量图片时如何让用户直观地看到处理进度。正如其 Readme.md 所述Here I just take example of image resizing for displaying progress bar. when we convert lots of images at time we can use progress bar to show how many images are resized.即以批量缩放图片作为业务载体展示如何在终端中呈现处理进度。这种用真实业务演示进度条的思路使 tqdm 的用法变得具体可感适合初学者理解进度条库 实际任务的配合方式。环境准备与依赖安装根据文档要求需要两个 Python 库pip install tqdm pip install Pillowtqdm用于在终端渲染进度条README 明确说明 This Library is for showing progress barPillow用于图片的打开、缩放与保存。仓库同时提供了 requirements.txt其内容为tqdm4.48.2 PIL1.1.6需要注意一个细节requirements.txt中固定的是旧版PIL1.1.6而 README 推荐安装的是PillowPillow 是 PIL 的活跃维护分支。实际运行时以pip install Pillow安装即可版本号未固定时请使用较新的 Pillow 版本详见下文ANTIALIAS 兼容性一节的说明。核心实现逐行解析项目入口脚本为 progress_bar_ with_images_resizing.py注意文件名中间含有一个空格全文约 30 行逻辑分为三个部分导入与单图处理函数、输入收集、进度条主循环。1. 导入与单图缩放函数from tqdm import tqdm from PIL import Image import os from time import sleep def Resize_image(size, image): if os.path.isfile(image): try: im Image.open(image) im.thumbnail(size, Image.ANTIALIAS) im.save(resize/ str(image) .jpg) except Exception as ex: print(fError: {str(ex)} to {image})Resize_image函数L7-L14负责处理单张图片os.path.isfile(image)先过滤目录项避免把目录当作图片打开Image.open(image)打开图片但并不立即加载全部像素数据直到 save 时才真正解码写入im.thumbnail(size, Image.ANTIALIAS)是 Pillow 提供的缩略图方法传入一个(width, height)二元组作为最大边界图片会按比例缩小到不超过该边界且始终保持原始宽高比不会拉伸变形im.save(resize/ str(image) .jpg)将结果以 JPG 格式保存到当前目录下的resize子目录文件名沿用原文件名追加.jpg后缀外层try/except捕获异常并打印出错文件保证单个文件失败不会中断整个批量任务。2. 收集用户输入并准备输出目录path input(Enter Path to images : ) size input(Size Height , Width : ) size tuple(map(int, size.split(,))) os.chdir(path) list_images os.listdir(path) if resize not in list_images: os.mkdir(resize)脚本以交互方式运行L17-L25图片路径输入存放原图的目录路径随后os.chdir(path)将工作目录切换到该路径目标尺寸输入格式为Height , Width如100, 100通过size.split(,)按逗号拆分再用map(int, ...)逐项转成整数最终得到tuple(map(int, ...))形式的(height, width)二元组传给thumbnail输出目录os.listdir(path)列出输入目录的全部条目若其中没有resize目录则调用os.mkdir(resize)创建。注意创建动作发生在列表之后因此本轮列表list_images不会包含新建的resize目录。3. 进度条主循环for image in tqdm(list_images, descResizing Images): Resize_image(size, image) sleep(0.1) print(Resizing Completed!)这是整个项目的点睛之处L27-L29用tqdm(list_images, descResizing Images)包裹列表tqdm 会自动根据迭代长度计算进度百分比、已处理数量/总数以及剩余时间ETA并在终端渲染出动态进度条descResizing Images参数为进度条附加描述文案便于区分不同任务的进度条sleep(0.1)人为引入 100ms 延迟——因为单张图片缩放速度很快不加延时进度条会一闪而过加上延时是为了让进度条效果可被观察演示用途循环结束后打印Resizing Completed!提示任务完成。tqdm 的更多用法仓库内的旁证tqdm在本仓库中被多次使用可帮助理解其 API 的灵活性在 Instagram_profile/profilepic.py 中使用tqdm(totalfile_size, unitB, unit_scaleTrue, descusername, asciiTrue)显示已知总字节数的下载进度——total用于指定总规模不依赖可迭代对象长度unit/unit_scale用于以人类可读单位KB/MB显示字节asciiTrue则用 ASCII 字符渲染进度条兼容不支持 Unicode 的终端在 News_website_scraper/moneycontrol_scrapper.py 中以for idx, link in enumerate(tqdm(nextlinks))的形式直接包装待爬取的链接列表与本文项目包装待处理图片列表的用法一致。由此可见tqdm 的核心模式是把一个可迭代对象或 total 总量交给 tqdm循环体内的真实工作量即为进度条的实际推进。本文项目的tqdm(list_images, desc...)即属于最基础的迭代器包装用法。Pillow thumbnail 缩放原理与兼容性注意保持宽高比的最大边界缩放与直接指定精确尺寸的Image.resize()不同Image.thumbnail(size)的行为是将图片按比例缩放到能放进size指定的矩形边界内的最大尺寸若原图本身小于边界则不会放大输出图片的宽高比与原图一致。因此即使你在命令行输入100, 100结果也未必是严格的正方形而是最长边不超过 100 像素的等比缩小图。若需要精确尺寸则应改用Image.resize((w, h))仓库中 Reduce_image_file_size/reduce_image_size.py 展示了基于 openCV 的固定比例缩放写法可供对照参考。Image.ANTIALIAS 的版本兼容问题源码使用了im.thumbnail(size, Image.ANTIALIAS)L11。需要说明的是Image.ANTIALIAS是 Pillow 早期的重采样常量在较新的 Pillow 版本中9.1.0 起标记弃用10.0.0 起移除Image.ANTIALIAS已被Image.Resampling.LANCZOS或简写Image.LANCZOS取代本文项目的requirements.txt固定了极旧的PIL1.1.6在该环境下Image.ANTIALIAS仍可用若你在新版本 Pillow 环境中运行建议将对应行改为im.thumbnail(size, Image.LANCZOS)即可获得同样的高质量重采样效果。这是从源码与依赖声明中可以明确推断出的兼容性要点实际运行前请根据本地 Pillow 版本选择合适写法。运行流程与结果验证完整的运行步骤准备一个包含若干图片如 JPG/PNG的目录例如./photos安装依赖pip install tqdm Pillow执行脚本python projects/Terminal_progress_bar_with_images_resizing/progress_bar_ with_images_resizing.py按提示输入图片目录路径如./photos再输入目标尺寸如100, 100注意以英文逗号分隔终端中即可看到形如Resizing Images: 45%|████▌ | 9/20 [00:0000:01, 8.92it/s]的动态进度条实时显示处理进度与速率结束后输入目录下会出现resize/子目录其中存放所有缩放后的*.jpg文件终端打印Resizing Completed!。已知边界与改进方向结合源码行为可以指出以下从代码结构推断出的注意点供使用与二次开发时参考输入目录包含非图片文件时会报错os.listdir返回目录下全部条目Resize_image会对每个条目调用Image.open。若目录中混有文本、压缩包等非图片文件会触发异常并被捕获打印Error: ... to file任务本身不会中断但输出目录中会缺少对应文件重复运行会递归处理旧输出第二次运行时resize目录已存在会被os.listdir一并列出并尝试当作图片打开会报错被捕获。可将Resize_image中的文件过滤条件增强为仅处理图片扩展名如.jpg/.png/.jpeg或在列表时跳过resize目录输出统一为 JPG 格式im.save(resize/ str(image) .jpg)固定输出 JPG透明 PNG 的 Alpha 通道会丢失。若需保留透明或输出原格式可调整保存逻辑相对路径依赖脚本通过os.chdir(path)切换工作目录输出目录resize相对该目录创建建议在调用前确认输入路径正确避免误切换工作目录影响其他文件操作。总体来说这个迷你项目以最小的代码量清晰演示了tqdm 进度条 Pillow 批量图片处理的组合范式既可当作 tqdm 的入门示例学习也可在此基础上扩展为批量格式转换、压缩、加水印等实用工具——仓库中 Convert_JPEG_to_PNG 等项目即展示了 Pillow 在图片转换场景下的更多用法。赞分享示例工程【免费下载链接】python-mini-projectsA collection of simple python mini projects to enhance your python skills项目地址https://gitcode.com/gh_mirrors/py/python-mini-projects点击查看免费下载相关推荐基于 Pillow 的 JPEG 转 PNG 图片转换python-mini-projects 终端脚本与 Tkinter 图形界面实战基于 Pillow 的 JPEG 转 PNG 图片转换python mini projects 终端脚本与 Tkinter 图形界面实战 本篇技术指南以 pr示例工程Python多媒体处理实战使用Pillow实现高级图片压缩与批量处理Python多媒体处理实战使用Pillow实现高级图片压缩与批量处理 引言 在当今数字内容爆炸式增长的时代图片处理已成为开发者必备的技能之一。本文将深入探讨示例工程教程python-mini-projects 实战基于 Selenium BeautifulSoup 的网站图片批量下载器python mini projects 实战基于 Selenium BeautifulSoup 的网站图片批量下载器 导读 本文以 python min示例工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考