编程地带

PIL图像操作,图片缩放

2018-11-30  本文已影响0人  MA木易YA

前文有讲过,常规文件缩放,几行代码即可实现

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() 这两个函数都是对图片进行缩放, 两者的主要区别如下:

基本调用方式如下:

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)

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
上一篇 下一篇

猜你喜欢

热点阅读