【python小练】0005

第 0005 题:你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小。

首先,iphone5的分辨率是1136x640。

if条件句判断横(纵)向是否大于对应的iphone5像素数,若是再减少像素。

code:

from PIL import Image
import glob, os

def resize():
    for files in glob.glob('*.jpg'):
        filepath,filename = os.path.split(files) #分割文件名和路径名
        fname,fext = os.path.splitext(filename)
        im = Image.open(files)
        w,h = im.size
        if w > 640:
            x = w/640.0
            w = 640
            h = int(h/x)
        if h>1136:
            x = h/1136.0
            h = 1136
            w = int(w/x)
        print(w, h)
        im0 = im.resize((w,h),Image.ANTIALIAS)
        im0.save('0005'+filename)

resize()

notes:

1. glob module的glob.glob()挑出所有'.jpg'后缀的文件

2. os.path module的split()分割文件名和路径名,splitext()分割文件名和后缀

3. PIL.Image.Image class的resize()函数更改分辨率,Image.ANTIALIAS,如字面意思是“抗锯齿,平滑”。

拿其中一张700x525的图片为例:

运行程序后效果:

①加了光滑化

②未加光滑化:

可以看见处理后的图片尺寸变小了。至于ANTIALIAS在这里并不明显,如果两张图同时打开重叠对比,肉眼其实可以轻松发现不同。

(凑巧这周计算机组成原理的课题是相关内容,感觉这门课最有意思的地方就是每周的小组PPT了(【计组课题】图像和图形)

原文地址:https://www.cnblogs.com/liez/p/5318025.html