批量将PNG转为JPG
生活随笔
收集整理的這篇文章主要介紹了
批量将PNG转为JPG
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
因為最近想把自己的“認知卡片”項目上云,受限于PNG文件尺寸和有限帶寬的矛盾,于是需要將近千張PNG轉為JPG,從而在基本維持分辨率和圖像視覺質量的前提下,使得文件大小縮減為原圖的大約13%。代碼如下:
"""先來說一下jpg圖片和png圖片的區別jpg格式:是有損圖片壓縮類型,可用最少的磁盤空間得到較好的圖像質量png格式:不是壓縮性,能保存透明等圖先安裝opencv包:pip install opencv-contrib-python """ from PIL import Image import cv2 as cv import os# PNG到JPG的轉換函數 def png2jpg(png_path):img = cv.imread(png_path, 0)w, h = img.shape[::-1]infile = png_pathoutfile = os.path.splitext(infile)[0] + ".jpg"img = Image.open(infile)img = img.resize((int(w), int(h)), Image.ANTIALIAS)try:if len(img.split()) == 4:# prevent IOError: cannot write mode RGBA as BMPr, g, b, a = img.split()img = Image.merge("RGB", (r, g, b))img.convert('RGB').save(outfile, quality=90)os.remove(png_path)else:img.convert('RGB').save(outfile, quality=90)os.remove(png_path)return outfileexcept Exception as e:print("PNG轉換JPG 錯誤", e)# 遞歸遍歷PNG文件 def show_files(path, all_files):# 首先遍歷當前目錄所有文件及文件夾file_list = os.listdir(path)# 準備循環判斷每個元素是否是文件夾還是文件,是文件的話,把名稱傳入list,是文件夾的話,遞歸for file in file_list:# 利用os.path.join()方法取得路徑全名,并存入cur_path變量,否則每次只能遍歷一層目錄cur_path = os.path.join(path, file)# 判斷是否是文件夾if os.path.isdir(cur_path):show_files(cur_path, all_files)else:# print(cur_path)filename, ext = os.path.splitext(file)if ext == ".png":print("PNG:" + cur_path)png2jpg(cur_path)all_files.append(file)return all_filesif __name__ == '__main__':# 傳入空的list接收文件名contents = show_files(r"C:\Users\CTH\Desktop\tmp", [])參考:
https://www.cnblogs.com/jiyanjiao-702521/p/10442416.html
https://www.cnblogs.com/cnapple/p/11792577.html
總結
以上是生活随笔為你收集整理的批量将PNG转为JPG的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TortoiseSVN图标设置在注册表中
- 下一篇: 女人活的长和xx基因有关?据说一个x坏了