利用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

 

    使用時請注意修改文件路徑和編號初始值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM