前文有讲过,常规文件缩放,几行代码即可实现
import Image
# 打开一个jpg图像文件,注意路径要改成你自己的:
im = Image.open('/Users/michael/test.jpg')
# 获得图像尺寸:
w, h = im.size
# 缩放到50%:
im.thumbnail((w//2, h//2))
# 把缩放后的图像用jpeg格式保存:
im.save('/Users/michael/thumbnail.jpg', 'jpeg')
这里将图像缩放至不大于iphone5的分辨率大小
from PIL import Image
import os
resultPath = 'result/'
# iphone 5 size
i5size = (1136, 640)
def change_size(dir_name):
for root, dirs, files in os.walk(dir_name):
for name in files:
filename = os.path.join(root, name)
print(filename)
change_picsize(filename, name)
def change_picsize(filename, picname):
#打开一张图片
pic = Image.open(filename)
w, h = pic.size
n = w / i5size[0] if (w / i5size[0]) >= (h / i5size[1]) else h / i5size[1]
#文件缩放
pic.thumbnail((w / n, h / n))
#pic.save(resultPath + picname.split('.')[0] + '_new.' + picname.split('.')[1])
im_name, im_ext = os.path.splitext(picname)
pic.save(resultPath + im_name + '_new' + im_ext)
if __name__ == '__main__':
change_size('test')
在修改尺寸的时候,使用的
thumbnail()
函数,并没有使用resize()
。Image.resize()
和Image.thumbnail()
这两个函数都是对图片进行缩放, 两者的主要区别如下:
- resize()函数会返回一个Image对象, thumbnail()函数返回None
- resize()修改后的图片在返回的Image中, 而原图片没有被修改; thumbnail()直接对内存中的原图进行了修改, 但是修改需要保存
- resize()中的size参数直接设定了resize之后图片的规格, 而thumbnail()中的size参数则是设定了x/y上的最大值. 也就是说, 经过resize()处理的图片可能会被拉伸, 而经过thumbnail()处理的图片不会被拉伸
- thumbnail()函数内部调用了resize(), 可以认为thumbnail()是对resize()的一种封装
基本调用方式如下:
from PIL import Image
# Image.resize usage
with Image.open("test.jpg") as img:
resized = img.resize((new_x, new_y), resample=Image.LANCZOS)
resized.save("resized.jpg", format="jpeg")
# Image.thumbnail usage
with Image.open("test.jpg") as img:
img.thumbnail((max_x, max_y), resample=Image.LANCZOS)
img.save("thumbnail.jpg", format="jpeg")
OS
os.walk()
os.walk()
方法为我们遍历目录树, 每次进入一个目录,它会返回一个三元组,包含相对于查找目录的相对路径,一个该目录下的目录名列表, 以及那个目录下面的文件名列表。
for root, dirs, files in os.walk(dir_name)
- root: 相对于 dir_name 的相对路径
- dirs: 该路径下的目录名列表,没有为空
- files: 目录下文件名列表
os.path
对于任何的文件名的操作,都应该使用 os.path
模块,而不是使用标准字符串操作来构造自己的代码。
os.path.join(path1[, path2[, ...]])
用于将分离的各部分分组合成一个路径名
os.path.splitext
将文件名与后缀分离,用于构建新的文件名字
s1 = os.getcwd() + "\\test.txt"
print("初始文件路径:", s1)
s2 = os.path.splitext(s1)
print("文件路径分离后:", s2)
print("*********************")
name, span = s2
print("文件名:"+name+'\n'+"后缀:"+span)
new_name = name +"_new" + span
print("构造后新的文件路径:", new_name)
#输出
初始文件路径: F:\ServerveManager\Git\file\show-me-the- code\0005\test\test.txt
文件路径分离后: ('F:\\ServerveManager\\Git\\file\\show-me-the-code\\0005\\test\\test', '.txt')
*********************
文件名:F:\ServerveManager\Git\file\show-me-the-code\0005\test\test
后缀:.txt
构造后新的文件路径: F:\ServerveManager\Git\file\show-me-the-code\0005\test\test_new.txt
- 更多代码详情参考我的Github
网友评论