1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| from PIL import Image import os
def downsample_images(source_folder, target_folder, scale_factor=0.6): """ 遍历source_folder中的所有子文件夹和mask图片,将图片下采样后保存到target_folder中, 保持原有的目录结构。 参数: source_folder (str): 包含子文件夹和mask图片的源文件夹路径。 target_folder (str): 用于保存下采样后图片的目标文件夹路径。 scale_factor (float): 图片尺寸缩小的比例,默认为0.5。 """ os.makedirs(target_folder, exist_ok=True) for root, dirs, files in os.walk(source_folder): relative_path = os.path.relpath(root, source_folder) target_subdir = os.path.join(target_folder, relative_path) os.makedirs(target_subdir, exist_ok=True) for filename in files: if filename.lower().endswith(('.jpg', '.jpeg', '.png')): src_path = os.path.join(root, filename) dst_path = os.path.join(target_subdir, filename) try: with Image.open(src_path) as img: width, height = img.size new_width = int(width * scale_factor) new_height = int(height * scale_factor) resized_img = img.resize((new_width, new_height), Image.ANTIALIAS) resized_img.save(dst_path) except IOError as e: print(f"Error processing {src_path}: {e}")
source_folder = 'r1' target_folder = 'r2'
downsample_images(source_folder, target_folder)
|