在GitHub上發現一些很有意思的項目,由于本人作為Python的初學者,程式設計代碼能力相對薄弱,為了加強Python的學習,特此利用前輩們的學習知識成果,自己去親自實作。
一周沒有更新了,主要還是自己太懶,三分熱度,我想如果我繼續這樣下去,做什麼事都做不好,以此為戒,堅持一個月内練習完這些知識點!
來源:GitHub
Python練手小程式項目位址:https://github.com/Show-Me-the-Code/python
寫作日期:2019.12.08
今天練習第0005題,題目如下:

這個題目,調整照片的大小,主要是學會使用PIL庫中image.resize()函數。這裡存在一些細節,就是什麼時候調整圖檔大小,什麼時候不需要調整。因為題目給出不超過iPhone5分辨率的大小,我們假定iPhone5的分辨率(640, 1136),如果圖檔的實際分辨率(w, h),滿足以下條件:
- w <= 640 且 h <= 1136,那麼圖檔大小不需要調整。
- 根據長寬調整比例對比,w_ratio = w/640,h_ratio = h/1136:
- 如果w_ratio>h_ratio,那麼以scale=w_ratio為基準,同時降低實際長寬,其實這裡寬計算出來是規定的寬,長按照基準調節即可。
- 同樣,w_ratio<=h_ratio,以scale=h_ratio為基準,隻不過長計算出是規定的長而已。
Python代碼如下:
import os
from PIL import Image
def search_image(path):
"""
在指定路徑下搜尋以'jpg', 'jpeg', 'png'字尾的圖檔名稱
:param path:
:return:
"""
ext = ['jpg', 'jpeg', 'png']
files = os.listdir(path)
# print(files)
image_files = list(filter(lambda x: x.split('.')[-1] in ext, files))
return image_files
def process_image(filename, m_width=640, m_height=1136):
"""
根據規定的長寬,調節實際圖檔的長寬
:param filename:
:param m_width:
:param m_height:
:return:
"""
image = Image.open(filename)
w, h = image.size
# 圖檔尺寸長寬任何一個不超過規定的長寬,不做處理
if w <= m_width and h <= m_height:
print(filename, w, h)
print(filename, 'is OK~')
return
print(filename, w, h)
# 以規定的長寬縮短實際的長寬規則:
# 寬比例大于長比例時,以寬比例做基準,也就是實際寬,調節到規定的寬;實際長,根據寬的調整比例去調節。
# 長比例大于寬比例時,以長比例做基準,也就是實際長,調節到規定的長;實際寬按照相同比例調整。
if 1.0*w/m_width > 1.0*h/m_height:
scale = 1.0*w/m_width
new_width = int(w / scale)
new_height = int(h / scale)
new_im = image.resize((new_width, new_height), Image.ANTIALIAS)
else:
scale = 1.0*h/m_height
new_width = int(w / scale)
new_height = int(h / scale)
new_im = image.resize((new_width, new_height), Image.ANTIALIAS)
# 儲存調整後的圖檔
new_im.save('new-' + filename)
new_im.close()
if __name__ == '__main__':
file_names = search_image('.')
for file in file_names:
process_image(file)