python实现图片格式批量转换
一个简单的代码实现png转jpg,或者jpg转png
首先安装需要的环境:python 3.6
piilow
tqdm
将代码复制,保存在txt文件,然后终端该txt文件运行即可,程序运行结束会在输入路径下新建一个目录(./new_data)用于保存更改格式后的图片.
# -*- coding: utf-8
import os
import os.path
from PIL import Image
from tqdm import tqdm
import time
from datetime import datetime
class Pathroot():
def __init__(self, root, sort_methods):
'''初始化文件路径'''
self.root = root
self.sort_methods = sort_methods
def get_path(self):
''' 输入路径,获取输入路径下所有文件的完整列表,并以字符串排序'''
path1 = []
for parent, dirnames, filenames in os.walk(self.root):
for filename in filenames:
currentPath = os.path.join(parent, filename)
path1.append(currentPath)
if self.sort_methods == 'str':
path1.sort(key=lambda x: str(os.path.basename(x).split('/')[-1][:-4]))
elif self.sort_methods == 'int':
path1.sort(key=lambda x: int(os.path.basename(x).split('/')[-1][:-4]))
else:
print('Please choose correct sort methods!!! str or int')
return path1
def get_newroot(old_root, new_root, number):
'''返回新的路径'''
new_root = new_root + '/' + str(old_root.split('/')[-1][:-4])
if number == 1:
new_root = new_root + '.png'
if number == 2:
new_root = new_root + '.jpg'
return new_root
if __name__ == '__main__':
# 输入图片路径、以及需要转换的格式
starttime = datetime.now()
print('--' * 10,'Begin_time: ' ,time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), '--' * 10)
input_path = input('Please enter the path to the folder : ')
tran_info = input('Please enter the image format to be converted: 1 or 2 (1 = png ,2 = jpg) ')
# 获取输入路径下全部图片的列表
path_root = Pathroot(input_path, 'str')
the_total_root = path_root.get_path()
new_root = '/'.join(input_path.split('/')[:-1])+ '/new_data'
os.mkdir(new_root)
print('The number of images under the path : {:^10}'.format(str(len(the_total_root))))
# 批量修改图片格式
for i in tqdm(range(len(the_total_root))):
img = Image.open(the_total_root[i])
new_root1 = get_newroot(the_total_root[i], new_root, int(tran_info))
img.save(new_root1)
endtime = datetime.now()
# 程序运行结束,打印结果
print('The program has ended, please check the results!!!')
print("RunTime: {} h--{} m--{} s".format(endtime.hour-starttime.hour, endtime.minute-starttime.minute, endtime.second-starttime.second))
print('--' * 10,'Stop_time: ' ,time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), '--' * 10)
终端运行结果如下: