在圖像處理過程中經(jīng)常會遇到縮小或放大圖像的情況,Image 類提供的 ?resize()
? 方法能夠?qū)崿F(xiàn)任意縮小和放大圖像。
?resize()
? 函數(shù)的語法格式如下:
resize(size, resample=image.BICUBIC, box=None, reducing_gap=None)
參數(shù)說明:
thumbnail()
? 的 resample 參數(shù)類似,默認(rèn)為 Image.BICUBIC;注意,?resize()
?會返回一個(gè)新的 image 對象。
下面是一組對圖像進(jìn)行放大操作的示例:
from PIL import Image
im = Image.open("./w3cschool.png")
try:
#放大圖片
image=im.resize((428,200))
#將新圖像保存至桌面
image.save("../放大圖像.png")
print("查看新圖像的尺寸",image.size)
except IOError:
print("放大圖像失敗")
輸出結(jié)果:
查看新圖像的尺寸 (428, 200)
放大后的圖片效果。如下所示:
圖1:pillow放大圖像
注:原圖尺寸為428,100,因?yàn)榉糯蟮某叽缗c原尺寸不是等比例的,所以會出現(xiàn)拉伸現(xiàn)象!
對圖片的局部位置進(jìn)行放大,示例如下:
from PIL import Image
im = Image.open("../w3cschool.png")
try:
#選擇放大的局部位置,并選擇圖片重采樣方式
# box四元組指的是像素坐標(biāo) (左上點(diǎn),右下點(diǎn))
#(0,0,110,100),表示以原圖的左上角為原點(diǎn)(0,0),選擇寬和高分別是(110,100)的圖像區(qū)域(右下點(diǎn)(110,100))
image=im.resize((220,200),resample=Image.LANCZOS,box=(0,0,110,100))
#使用resize對選中的區(qū)域進(jìn)行放大
image.show()
#保存
image.save("./放大圖像.png")
print("查看新圖像的尺寸",image.size)
except IOError:
print("放大失敗")
圖片的放大效果如下所示:
注:這里選中的區(qū)域?yàn)榫幊酞{logo中的小獅子頭,原大小為(110,100),現(xiàn)大小為(220,200),這里進(jìn)行的是等比例放大,所以圖片沒有變形。
縮略圖(thumbnail image)指的是將原圖縮小至一個(gè)指定大?。╯ize)的圖像。通過創(chuàng)建縮略圖可以使圖像更易于展示和瀏覽。
Image 對象提供了一個(gè)? thumbnail()
? 方法用來生圖像的縮略圖,該函數(shù)的語法格式如下:
thumbnail(size,resample)
使用示例如下:
from PIL import Image
im = Image.open("../放大圖像.png")
im.thumbnail((100,100))
print("縮略圖尺寸",im.size)
#將縮略圖保存至桌面
im.save("./th.png")
輸出結(jié)果:
縮略圖尺寸 (100, 91)
注意,縮略圖的尺寸可能與您指定的尺寸不一致,這是因?yàn)?nbsp;Pillow 會對原圖像的長、寬進(jìn)行等比例縮小,當(dāng)指定的尺寸不符合圖像的尺寸規(guī)格時(shí),縮略圖就會創(chuàng)建失敗, 比如指定的尺寸超出了原圖像的尺寸規(guī)格。
在圖像處理過程中,對于某些不需要精細(xì)處理的環(huán)節(jié),我們往往采用批量處理方法,比如批量轉(zhuǎn)換格式,批量修改尺寸,批量添加水印,批量創(chuàng)建縮略圖等,這是一種提升工作效率的有效途徑,它避免了單一、重復(fù)的操作。通過 Pillow 提供的? Image.resize()
?方法可以批量地修改圖片尺寸,下面看一組簡單的示例。
首先找一些類型相同,但尺寸不一的圖片,并把它們放入桌面的 image01 文件夾中。如下所示:
下面開始編寫代碼:
# 批量修改圖片尺寸
import os
from PIL import Image
#讀取圖片目錄
fileName = os.listdir('./image01/')
print(fileName)
#設(shè)定尺寸
width = 350
height = 350
# 如果目錄不存在,則創(chuàng)建目錄
if not os.path.exists('./NewImage/'):
os.mkdir('./NewImage/')
# 循環(huán)讀取每一張圖片
for img in fileName:
old_pic = Image.open('./image01/' + img)
new_image = old_pic.resize((width, height),Image.BILINEAR)
print (new_image)
new_image.save('./NewImage/'+img)
輸出結(jié)果如下所示:
['向日葵.jpg', '國寶.jpg', '矩形圖.jpg', '蝴蝶.jpg'] <PIL.Image.Image image mode=RGB size=350x350 at 0x2B9E670> <PIL.Image.Image image mode=RGB size=350x350 at 0x31D0C90> <PIL.Image.Image image mode=RGB size=350x350 at 0x2B90DB0> <PIL.Image.Image image mode=RGB size=350x350 at 0x31D0C90>
NewImage 目錄的內(nèi)容如下:
圖4:處理完成的圖片
更多建議: