1、前言
在之前的文章中,介绍了图片的压缩技术,这里讲解如何利用python批量将图片改为指定后缀的格式。当然,也可以为深度学习批量更改文件后缀,例如在分割中,可能需要img和mask的图片名称完全一致等等
PYTHON 自动化办公:压缩图片(PIL)_image save quality图像压缩-CSDN博客https://blog.csdn.net/qq_44886601/article/details/136413689
文中使用的库函数是python的PIL库函数(pillow),安装如下
pip install pillow
Tips :
image_format = ['.jpg','.jpeg','.png','.gif','.bmp','.tiff','.ai','.cdr','.eps'] # 常见的图片后缀名
代码中会有一个常见图片后缀的列表,为了后面的使用,如果使用的图片后缀不在里面,可以自行添加
2、更改单张图片的后缀
代码如下:
因为有的图片名称很长,甚至中途还会将后缀出现,例如 sda1233pngddwsa.png
但无论怎样风骚的文件名,不可能出现带 . + 后缀 的字符串,因为会直接报错。所以这里image_format 列表文件名都加了 . 方便遍历
from PIL import Image
def main(img_path,img_fm):
image_format = ['.jpg','.jpeg','.png','.gif','.bmp','.tiff','.ai','.cdr','.eps'] # 常见的图片后缀名
for i in image_format:
if i in img_path:
ret_path = img_path.split(i)[0] # 文件名
ret_path = ret_path + '.' + img_fm # 返回的图片名
img = Image.open(img_path).convert('RGB')
img.save(ret_path)
if __name__ == '__main__':
root = 'test.png' # 传入图片的路径
img_format = 'jpeg' # 待更改的后缀格式 jpg png jpeg ...
main(img_path=root,img_fm=img_format)
效果如下:
3、多张图片更改成指定后缀(单个文件夹)
测试的目录如下:
目的是将demo目录的所有图片更改为 jpg 格式,并且保存在新的目录
代码:
from PIL import Image
import os
def main(img_path,img_fm):
image_format = ['.jpg','.jpeg','.png','.gif','.bmp','.tiff','.ai','.cdr','.eps'] # 常见的图片后缀名
# 返回的新目录
ret_folder_path = img_path + '_ret'
if not os.path.exists(ret_folder_path):
os.makedirs(ret_folder_path)
image_list = [i for i in os.listdir(img_path)] # 所有的图片文件
for im in image_list:
for i in image_format:
if i in im:
ret_path = im.split(i)[0] # 文件名
ret_path = ret_path + '.' + img_fm # 返回的图片名
img = Image.open(os.path.join(img_path,im)).convert('RGB')
img.save(os.path.join(ret_folder_path,ret_path))
if __name__ == '__main__':
root = 'demo' # 传入图片文件夹目录
img_format = 'jpg' # 待更改的后缀格式 jpg png jpeg ...
main(img_path=root,img_fm=img_format)
效果如下:
4、多个文件夹的图片后缀更改
测试目录:
代码:
from PIL import Image
import os
def main(img_path,img_fm):
image_format = ['.jpg','.jpeg','.png','.gif','.bmp','.tiff','.ai','.cdr','.eps'] # 常见的图片后缀名
# 返回的新目录
ret_folder_path = img_path + '_ret'
if not os.path.exists(ret_folder_path):
os.makedirs(ret_folder_path)
sub_folder = [i for i in os.listdir(img_path)]
for sf in sub_folder:
os.makedirs(os.path.join(ret_folder_path,sf))
for i in os.listdir(os.path.join(img_path,sf)): # 图片名
for j in image_format:
if j in i:
ret_path = i.split(j)[0] # 文件名
ret_path = ret_path + '.' + img_fm # 返回的图片名
img = Image.open(os.path.join(img_path,sf,i)).convert('RGB')
img.save(os.path.join(ret_folder_path,sf,ret_path))
if __name__ == '__main__':
root = 'demo' # 传入图片文件夹目录
img_format = 'jpg' # 待更改的后缀格式 jpg png jpeg ...
main(img_path=root,img_fm=img_format)
效果演示: