题目要求:

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

首先我们需要获取图片,可以通过我之前写的python实战之爬取网站图片到本地来获取图片,当然你也可以选择在自己的图片上做实验(但要记住修改后的图片不要覆盖已有图片)。

谷歌到的iphone5分辨率是1136×640

这里我用到了PIL库,采取的方法是:

维持宽和高比例不变的情况下,比较宽、高哪个更接近目标,并调整

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from PIL import Image
import os
def change_image_size(picpath, bakpath):
iphone5_size = (640, 1136)
for cnt in range(0, 59):
image = Image.open(picpath + "/%s" % cnt + ".jpg")
curr_size = image.size
print(curr_size)
if(iphone5_size[0]/curr_size[0] < iphone5_size[1]/curr_size[1]):#根据比例进行调整
if int(curr_size[1]/curr_size[0]*640) > 1136:
curr_size = iphone5_size
else:
curr_size = (640, int(curr_size[1]/curr_size[0]*640))
else:
if int(curr_size[0]/curr_size[1]*1136) > 640:
curr_size = iphone5_size
else:
curr_size = (int(curr_size[0]/curr_size[1]*1136), 1136)
newimg = image.resize(curr_size)
newimg.save(bakpath + "/%s" % cnt + ".jpg")
picpath = "D:/imgs_from_yinwoods"#图片所在路径
bakpath = "backup"#目标保存路径
change_image_size(picpath, bakpath)
{% endhighlight %}

运行代码后可以发现要求是达到了,但是总感觉哪里不对,就像我们在手机中查看图片并不会出现图片拉伸变形的情况。

因此我在网上搜了下,发现了这篇文章:使用PIL调整图片分辨率

文章写的很好,代码实现也值得参考,特别是搜索路径内存在的所有图片方法的实现。

看了下,主要的做法是从图片中截取部分来显示;有兴趣的朋友可以学习下。