1. 程式人生 > >用python PIL庫進行圖片處理時遇到的問題

用python PIL庫進行圖片處理時遇到的問題

先上程式碼,程式碼是廖雪峰python學習官網上的,有興趣可百度搜索。

# coding:utf-8
from PIL import Image

#開啟一個jpg影象檔案
im = Image.open('E:/MyDownloads/Leslie.jpeg')
#獲得影象尺寸
w,h = im.size
#縮放到50%:
im.thumbnail((w//2,h//2))
#把縮放後的影象用JPEG格式儲存
im.save('C:/Workspace/thumbnail_Leslie.jpeg','jpeg')

第一點,只要是有中文註釋的,開頭兩行都必須加上編碼說明,#coding:utf-8,不然cmd執行時會報錯,提示沒有解碼宣告。

第二點,匯入庫檔案的時候如果只是寫:import Image,會報錯提示ImportError:no module named Image。要說明是從哪個庫檔案裡面匯入的:from PIL import Image,這樣宣告就不會出現問題。我看別人在linux下這樣宣告沒有問題,我用的windows 7 ,不可以。

第三點,寫檔案路徑時要用左斜槓,不能用反了寫成右斜槓,不然會報錯,找不到檔案或路徑。E:/MyDownloads/Leslie.jpeg,這樣可以,E:\MyDownloads\Leslie.jpeg這樣不行。

第四點,檔案型別。如這一句im = Image.open(‘E:/MyDownloads/Leslie.jpeg’),我剛開始寫的是Leslie.jpg,我以為和Leslie.jpeg沒有什麼區別,這樣寫也可以,但是執行的時候報錯:
這裡寫圖片描述


提示沒有這個檔案或者路徑。我仔細核對了下,發現路徑和拼寫沒有什麼問題,在網上搜了下也沒找到類似的問題和答案。看到程式碼中的’jpeg’這個,想到會不會是檔案格式的問題,於是將Leslie.jpg改成了Leslie.jpeg,然後儲存再次執行,通過了,程式正常執行。
這裡寫圖片描述
在網上找了下JPG和JPEG的區別,都說沒什麼區別,然後我改了下

# coding:utf-8
from PIL import Image

#開啟一個jpg影象檔案
im = Image.open('E:/MyDownloads/timg.jpg')
#獲得影象尺寸
w,h = im.size
#縮放到50%:
im.thumbnail((w//2,h//2))
#把縮放後的影象用JPEG格式儲存 im.save('C:/Workspace/timg1.jpg','jpg')

找了一張JPG格式的圖片,把程式碼im.save(‘C:/Workspace/timg1.jpg’,’jpg’)裡的’jpeg’也改成了’jpg’。試了下,不行
這裡寫圖片描述
跟據裡面的路徑,找到了Image.py檔案,開啟檔案在裡面發現了這樣一行程式碼: “from . import JpegImagePlugin”,匯入的外掛是JPEG的外掛,所以只能以JPEG的方式解碼,所以宣告‘jpg’會報錯。然後把程式碼再改了下:im.save(‘C:/Workspace/timg1.jpg’,’jpeg’),解碼方式宣告為’jpeg’,再執行,通過。
總結:不管你是開啟.jpeg檔案還是開啟.jpg檔案,這兩個的解碼方式都是一樣的,因為都是使用的JPEG的壓縮方式。之所以會出錯,是因為寫檔名的時候檔案格式沒有寫清楚。如果圖片檔案是JPEG格式的,字尾名一定要寫成.jpeg,比如Leslie.jpeg,如果寫成Leslie.jpg,就會出錯,.jpg格式的圖片檔案也是同樣的道理。就這麼多了。

Time flies.
See you!