利用python将webp文件转化为jpg文件,将png文件修改为jpg,图像重命名
webp是谷歌发行的一种不损伤图像质量的压缩存储方式,可有效减小图像数据存储空间。
但是在神经网络中,常用的输入图像格式为jpg,所以需要转化,利用PIL库
一、单张图像处理
import os
from PIL import Image
path = “E:\\newdatas\\data\\try\\991.webp”
im=Image.open(path)
im.load()
im.save(“E:\\newdatas\\data\\try\\991.jpg”)
os.remove(path)
我的运行环境是win10,所以图像路径格式采用双斜线或反斜线,运行脚本,可将该图像转化为jpg格式的文件存储,并且删除原图像。
代码解析:
PIL是python的第三方图像处理库。
Image.open(path)是读取图像,但是该操作不读取图像数据,因此如果需要对图像做处理,需要再使用Image.load()来强行加载图像数据。
使用im.save()保存图像,可直接将图像保存成需要的格式。(不放心的话,可以再读取一下重新保存的图像,输出其format属性,验证一下是否是jpeg)
保存完之后删除原图像,直接使用os.remove()函数
二、批量处理
import os from PIL import Image #图像预处理包括修改图像格式、编号 class proimage(): def __init__(self): self.path = "E:\\newdatas\\data\\try" #读取文件夹下图像 def read(self): filelist=os.listdir(self.path) return filelist def webp2jpg(self,filelist): #查找图像方式不同,该函数只查找所有.webp格式的文件 for item in filelist: if item.endswith(\'.webp\') : src = os.path.join(os.path.abspath(self.path), item) print("src=",src) im=Image.open(src) im.load() save_name=src.replace(\'webp\',\'jpg\') im.save(\'{}\'.format(save_name),\'JPEG\') os.remove(src) if __name__ == \'__main__\': newtype = proimage() filelist=newtype.read() newtype.webp2jpg(filelist)
三、PNG格式修改为jpg
PNG是一种无损压缩的位图片格式,其通道数=4,除了R,G,B外,还有一个透明度,因此在修改其格式为jpg时,需要放弃透明度通道。
因此思路是读取图像,获取图像通道,将通道merge为rgb,图像另存为jpg格式。
def png2jpg(self,filelist): for item in filelist: if item.endswith(".png"): src=os.path.join(os.path.abspath(self.path), item) im=Image.open(src) im.load() #print("原图像通道数=\'{}\'".format(len(im.split()))) r,g,b,a=im.split() im=Image.merge("RGB",(r,g,b)) #print(\'现图像通道数=\',len(im.split())) save_name=src.replace("png","jpg") im.save(\'{}\'.format(save_name),\'JPEG\') os.remove(src)
四、图像编号
为较好的用于深度学习,需要将图像按照顺序进行编号,代码如下
def rename(self,filelist): i=1542 for item in filelist: if item.endswith(\'.jpg\') or item.endswith(\'.jpeg\') or item.endswith(\'.JPG\'): src=os.path.join(os.path.abspath(self.path),item) dst=os.path.join(os.path.abspath(self.path), \'0\' + format(str(i), \'0>3s\') + \'.jpg\') os.rename(src,dst) #print(\'converting %s to %s ...\' % (src, dst)) i=i+1
使用时请注意修改文件路径和编号初始值