先看功能能达到的效果
测试案例
1、处理前的图片
2、处理后的图片
在计算机视觉、机器学习以及日常的图像处理任务中,常常需要对大量图片进行统一尺寸调整,并确保生成的新图片文件名具有唯一性。下面的文章将介绍如何通过Python编程语言中的PIL(Python Imaging Library)库配合uuid模块,实现图片的批量缩放及自动采用UUID作为新文件名的独特命名方式。
首先,我们导入必要的库:
Python
import os
from PIL import Image
import uuid
os库用于操作系统相关的功能,如读取目录内容、创建目录等;PIL库则提供了强大的图像处理能力,可以打开、转换和保存各种格式的图片;而uuid库则负责生成全局唯一的通用唯一标识符(UUID),它将用于为每个缩放后的图片生成一个独特的文件名。
接下来,定义原始图片目录和目标保存目录:
Python
original_dir = './yuan_img/'
new_dir = './new_img/'
如果目标目录尚不存在,则创建之:
Python
if not os.path.exists(new_dir):
os.makedirs(new_dir)
然后设定目标图片尺寸,这里以224x224为例:
Python
target_size = (224, 224)
现在进入核心循环部分,遍历原始图片目录中的所有文件:
Python
for filename in os.listdir(original_dir):
# 检查文件是否为图片(此处仅处理.jpg和.png格式)
if filename.endswith('.jpg') or filename.endswith('.png'):
# 构建原始图片路径
img_path = os.path.join(original_dir, filename)
try:
# 使用PIL打开并转换图片到RGB模式
with Image.open(img_path) as im:
im_rgb = im.convert("RGB")
# 调整图片尺寸至目标大小,同时应用LANCZOS算法进行高质量抗锯齿处理
im_resized = im_rgb.resize(target_size, Image.LANCZOS)
# 使用uuid.uuid4()生成一个唯一标识符作为新的文件名
new_filename = str(uuid.uuid4()) + '.jpg'
# 计算新图片的保存路径
new_img_path = os.path.join(new_dir, new_filename)
# 保存已调整尺寸且重新命名的图片
im_resized.save(new_img_path, format='JPEG')
# 输出成功信息
print(f"Successfully resized and saved: {new_filename}")
except Exception as e:
# 输出处理错误信息
print(f"Error processing file {filename}: {e}")
通过上述代码,程序会逐一读取原始图片目录中的每一张图片,将其缩放到指定尺寸,并利用uuid生成一个随机且唯一的字符串作为新文件名。最后,将调整尺寸后的图片保存至目标目录,并输出相应的日志信息。这样不仅实现了图片的批量处理,还确保了新文件名不会出现重复,便于后续的管理和操作。