2025年3月27日 星期四 甲辰(龙)年 月廿六 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

python --批量转图片格式

时间:08-16来源:作者:点击数:23
城东书院 www.cdsy.xyz

python --批量转图片格式

单次转换

  • from PIL import Image
  • img = Image.open(r'C:\Users\EDY\Desktop\20220531203949.bmp')
  • img.save(r'C:\Users\EDY\Desktop\20220531203949.png')

批量转换

  • import os
  • from PIL import Image
  • class ImageToFormat(object):
  • '''批量转图片格式'''
  • def __init__(self, source_path: str, target_path: str, *, target_suffix='png'):
  • """
  • source_path: 需要转化的文件夹路径(程序会递归遍历当前路径下所有图片);
  • target_path: 目标文件路径,会在目标路径下新建一个文件夹,并复制原始文件夹结构;
  • target_suffix: 需要转换的图片后缀;
  • """
  • self._source_path = source_path
  • self._target_path = target_path
  • self._target_suffix = target_suffix
  • @staticmethod
  • def save_single(root: str, source_filename: str, suffix: str, target_path: str, target_suffix: str):
  • try:
  • img = Image.open(os.path.join(root, source_filename + suffix))
  • img = img.convert('RGB')
  • img.save(os.path.join(target_path, f'{source_filename}.{target_suffix}'), target_suffix)
  • except Exception as e:
  • print(e)
  • return e
  • return False
  • @staticmethod
  • def copy_single(root: str, source_filename: str, target_path: str):
  • try:
  • with open(os.path.join(root, source_filename), 'rb') as file:
  • read = file.read()
  • with open(os.path.join(target_path, source_filename), 'wb') as file:
  • file.write(read)
  • except Exception as e:
  • print(e)
  • return e
  • return False
  • def run(self):
  • file_paths = []
  • source_path_len = len(self._source_path)
  • if not (self._source_path.endswith('/') or self._source_path.endswith('\\')):
  • source_path_len += 1
  • if not os.path.exists(self._target_path):
  • os.makedirs(self._target_path)
  • for root, directories, files in os.walk(self._source_path):
  • for file in files:
  • path = root[source_path_len:] # 去掉要被替换掉的目录前缀
  • target_directory = os.path.join(self._target_path, path) # 这是新目录,要保存的位置
  • file_paths.append((root, file, target_directory))
  • for directory in directories: # 创建目录,要是把所有文件保存在同目录下,同名文件会冲突
  • source_path = os.path.join(root, directory)
  • path = source_path[source_path_len:]
  • target_directory = os.path.join(self._target_path, path)
  • if not os.path.exists(target_directory):
  • os.makedirs(target_directory)
  • for root, file, target in file_paths:
  • fname, suffix = os.path.splitext(file)
  • lower_suffix = suffix.lower()
  • if lower_suffix in ('.jpg', '.jpeg', '.bmp', '.png'):
  • ImageToFormat.save_single(root, fname, suffix, target, self._target_suffix)
  • else:
  • ImageToFormat.copy_single(root, file, target)
  • r = ImageToFormat(r'D:\yi\game_resources\media', r'C:\Users\EDY\Desktop\新建文件夹1', target_suffix='bmp')
  • r.run()
城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐