Python1000题0005题 题解
一、题目
第 0005 题: 你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小。
二、学习难点
- 如何找到图片(位置、需要判断文件类型)
- 如何缩放图片(保持纵横比)
三、代码
from PIL import Image
import os, imghdr
def photo_resize(path):
pw,ph = (1136, 640)#iphone5分辨率
f_list = os.listdir(path)#获取文件夹中的文件列表
for each in f_list:
f_path = path+'\\'+each#表示单反斜杠时需要反义
if imghdr.what(f_path):#判断是否是图片类型
img = Image.open(f_path)
w,h = img.size
if(w>pw):
img = img.resize((int(pw), int(h*(pw/w))))#resize返回的是一个img
w, h = img.size
if(h>ph):
img = img.resize((int(w*(ph/h)), int(ph)))#resize参数是一个包括两个整形变量的元组
img.save(f_path)
del img
if __name__ == "__main__":
photo_resize(".\dir")
四、心得
- 用os模块的listdir()可以获取文件夹中的文件
- 用imghdr模块可以实现图片类型判断
- 表示路径时反斜杠最好用\表示
- ./可以表示绝对路径
- resize方法返回的是一个Image,而不是直接修改img,此外size参数是一个元组(其中两个参数长宽均为整形)