栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python --批量转图片格式

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python --批量转图片格式

单次转换

from PIL import Image


img = Image.open(r'C:UsersEDYDesktop20220531203949.bmp')
img.save(r'C:UsersEDYDesktop20220531203949.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:yigame_resourcesmedia', r'C:UsersEDYDesktop新建文件夹1', target_suffix='bmp')
r.run()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/950396.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号