Python Pillow Image.save 保存為jpg圖片壓縮問題
Pillow圖片格式轉換
Pillow 庫支持多種圖片格式,您可以直接使用 open() 方法來讀取圖片,並且無須考慮圖片是何種類型。Pillow 能夠很輕松地實現圖片格式之間的轉換。
圖片格式之間的轉換主要有以下兩種方法,下面分別對它們進行瞭介紹:
save()
顧名思義,save() 方法用於保存圖像,當不指定文件格式時,它會以默認的圖片格式來存儲;如果指定圖片格式,則會以指定的格式存儲圖片。save() 的語法格式如下:
Image.save(fp, format=None)
參數說明如下:
- fp:圖片的存儲路徑,包含圖片的名稱,字符串格式;
- format:可選參數,可以指定圖片的格式。
示例如下:
from PIL import Image im = Image.open("C:/Users/Administrator/Desktop/c-net.png") im.save('C:/Users/Administrator/Desktop/c.biancheng.net.bmp')
此時您的計算機桌面上會存在一個 c.bianchneg.net.BMP格式的圖片。
convert()+save()
註意,並非所有的圖片格式都可以用 save() 方法轉換完成,比如將 PNG 格式的圖片保存為 JPG 格式,如果直接使用 save() 方法就會出現以下錯誤:
from PIL import Image im = Image.open("C:/Users/Administrator/Desktop/c-net.png") im.save('C:/Users/Administrator/Desktop/c.biancheng.net.jpg')
錯誤信息如下所示:
#系統錯誤,RGBA不能作為JPEG圖片的模式
OSError: cannot write mode RGBA as JPEG
引發錯誤的原因是由於 PNG 和 JPG 圖像模式不一致導致的。其中 PNG 是四通道 RGBA 模式,即紅色、綠色、藍色、Alpha 透明色;JPG 是三通道 RGB 模式。因此要想實現圖片格式的轉換,就要將 PNG 轉變為三通道 RGB 模式。
Image 類提供的 convert() 方法可以實現圖像模式的轉換。該函數提供瞭多個參數,比如 mode、matrix、dither 等,其中最關鍵的參數是 mode,其餘參數無須關心。語法格式如下:
convert(mode,parms**)
- mode:指的是要轉換成的圖像模式;
- params:其他可選參數。
修改後的代碼如下所示:
from PIL import Image im = Image.open("C:/Users/Administrator/Desktop/c-net.png") #此時返回一個新的image對象,轉換圖片模式 image=im.convert('RGB') #調用save()保存 image.save('C:/Users/Administrator/Desktop/c.biancheng.net.jpg')
通過以上代碼,成功將 PNG 格式的圖片轉換為瞭 JPG 格式。
Pillow Image.save 保存為jpg圖片壓縮
在使用Pillow中的Image.save()方法,使用默認參數保存jpg圖片的過程中發現圖片被壓縮的很嚴重,導致原來很大的大小變成幾十K。這是因為在保存為jpg的過程中,內部使用壓縮算法對圖片進行的壓縮處理。
但是有些時候往往需要圖片的大小不能變化太大或不能太小。所以在使用此方式時可以加入參數:
imObj.save(img_name, quality=95)
quality參數: 保存圖像的質量,值的范圍從1(最差)到95(最佳)。 默認值為75,使用中應盡量避免高於95的值; 100會禁用部分JPEG壓縮算法,並導致大文件圖像質量幾乎沒有任何增益。
使用此參數後,圖片大小會增加。如果圖片的大小還不能滿足你的需求,是否還有其他方式去增加圖片大小呢?
通過查閱資料並嘗試,發現save方法還有一個可以配合quality使用的參數,能夠大大增加圖片大小:
imObj.save(new_name, quality=95, subsampling=0)
subsampling參數:子采樣,通過實現色度信息的分辨率低於亮度信息來對圖像進行編碼的實踐。 (參考:https://en.wikipedia.org/wiki/Chroma_subsampling)
可能的子采樣值是0,1和2,對應於4:4:4,4:2:2和4:1:1(或4:2:0?)。
經過實踐將值設為0便可以滿足圖片大小增大的需求。
註意: 以上方法的參數隻針對於保存為JPG/JPEG格式的圖片的情況。
參考文檔:https://pillow.readthedocs.io/en/5.1.x/handbook/image-file-formats.html#jpeg
參考文檔:https://pillow.readthedocs.io/en/4.0.x/PIL.html
到此這篇關於 Python Pillow Image.save 保存為jpg圖片壓縮問題的文章就介紹到這瞭,更多相關Pillow Image.save 保存為jpg內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 昨晚我用python幫隔壁小姐姐P證件照然後發現
- python之pil的使用詳解
- Python 圖像處理 Pillow 庫詳情
- python圖片格式轉換腳本
- 基於python使用Pillow做動態圖在圖中生成二維碼以及圖像處理