IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 使用Python批量转换图片格式 -> 正文阅读

[Python知识库]使用Python批量转换图片格式

作者:recommend-item-box type_blog clearfix

PNG 创建于 1995 年,是用于在网络上传输图像的 GIF 格式的免费替代品。因为PNG没专利,所以编辑和查看PNG也不需要许可。PNG图像在压缩时不会丢失任何数据,编码、解码方式一样。与JPEG 文件等有损选项相比,这是一个很大的优势。

所以,要想把其它格式的图片转换为PNG格式是很方便的。除了一种情况,那就是图片比较多的时候。这时需要一些工具来帮助我们批量转换。很多解决方案都需要安装什么软件,下面这种,额……也需要安装脚本解释器,除此之外还得安装一个包:

pip install pillow

然后编写和执行脚本:

from multiprocessing import Pool
import os
import re
from PIL import Image


def save_single(
    root: str, source_filename: str, suffix: str, target_path: str, target_suffix: str='png'
):
    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


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(source_path: str, target_path: str, pool):
    file_paths = []
    source_path_len = len(source_path)
    if not(source_path.endswith('/') or source_path.endswith('\\')):
        source_path_len += 1
    if not os.path.exists(target_path):
        os.makedirs(target_path)
    for root, directories, files in os.walk(source_path):
        for file in files:
            path = root[source_path_len:] # 去掉要被替换掉的目录前缀
            target_directory = os.path.join(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(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'):
            pool.apply_async(save_single, (root, fname, suffix, target))
        else:
            pool.apply_async(copy_single, (root, file, target))


SOURCE_PATH = '/home/ubuntu/example/Download' # 一个目录,脚本会递归地访问这文件夹里的图片
TARGET_PATH = '/home/ubuntu/example/project/assets' # 脚本会在转换的时候把原来目录的结构都复刻进来,也就是说转换前后各个图片的相对位置没变

if __name__ == "__main__":
    pool = Pool(8) # 这个8是进程池的大小,根据电脑核数和内存以及磁盘转速来选
    run(SOURCE_PATH, TARGET_PATH, pool)
    pool.close()
    pool.join()
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:14:27  更:2022-05-05 11:14:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:39:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码