一、resize基本概念
在圖像處理中,resize是指改變圖像的大小,通常比例和尺寸都會發生變化。PIL中的resize函數主要用於調整圖像的大小,並可以改變圖像的比例和尺寸。
resize方法有兩個參數,即參數size和resample,其中size可以是一個整數,也可以是一個二元的元組,表示新的圖像大小;resample是指新圖像的採樣方式,即圖像調整的方法,可以是近鄰法、雙線性插值法、三次樣條插值法等。
下面是一個resize函數的基本代碼:
from PIL import Image # 打開原始圖像 im = Image.open("example.jpg") # 調整圖像尺寸 im_resized = im.resize((400, 300), resample=Image.BILINEAR) # 顯示調整後的圖像 im_resized.show()
二、resize參數詳解
1. size參數
size參數是一個元組,表示新的圖像大小。如果指定一個整數n,則表示圖像的寬和高都將縮放到原圖像大小的n分之一。如果指定一個二元元組(w, h),則表示圖像的寬和高將縮放到指定的大小(w, h)。
如果只指定寬度或高度,則使用Aspect Ratio來調整另一個維度的大小,使得圖像的比例不會變形。
例如,下面的代碼將把圖像的寬和高都縮放到原來的2倍:
from PIL import Image # 打開原始圖像 im = Image.open("example.jpg") # 縮放圖像大小到原來的2倍 im_resized = im.resize((im.size[0]*2, im.size[1]*2), resample=Image.BILINEAR) # 顯示調整後的圖像 im_resized.show()
2. resample參數
resample參數用於指定新圖像的採樣方式,即圖像調整的方法。PIL中支持多種圖像調整的方法,如近鄰法、雙線性插值法、三次樣條插值法等。
具體的resample參數取值及其內部實現方式見下表:
resample參數取值 | 內部實現方式 |
---|---|
Image.NEAREST | 最近鄰法 |
Image.BOX | 箱式過濾 |
Image.BILINEAR | 雙線性插值法 |
Image.HAMMING | 漢明窗口法 |
Image.BICUBIC | 三次樣條插值法 |
Image.LANCZOS | Lanczos窗口法 |
例如,下面的代碼將使用雙線性插值法將原圖像縮放到原來的2倍:
from PIL import Image # 打開原始圖像 im = Image.open("example.jpg") # 縮放圖像大小到原來的2倍 im_resized = im.resize((im.size[0]*2, im.size[1]*2), resample=Image.BILINEAR) # 顯示調整後的圖像 im_resized.show()
三、resize實際應用
1. 縮略圖
縮略圖是一種特殊的圖像resize,用於將圖像縮小到指定大小以適合網頁顯示或縮略圖顯示。
在PIL中,可以使用thumbnail方法來創建縮略圖,它與resize方法的區別在於,thumbnail會更改原始圖像,而resize方法會返回一個新的圖像對象。
下面的示例代碼將創建一個200×200像素的縮略圖:
from PIL import Image # 打開原始圖像 im = Image.open("example.jpg") # 創建並顯示縮略圖 im.thumbnail((200, 200)) im.show()
2. 批量處理圖片
在實際應用中,經常需要批量處理大量的圖像,比如將多張圖片縮放到相同的大小、水平翻轉或垂直翻轉等操作。這時可以使用Python的os、glob和PIL庫來實現。
下面的示例代碼將批量處理指定文件夾下的所有圖片,並將它們縮放到指定的大小:
import os import glob from PIL import Image # 指定原始圖像目錄和輸出目錄 input_dir = "/input" output_dir = "/output" # 指定目標大小 target_size = (200, 200) # 遍歷所有png和jpg圖像文件 for file_path in glob.glob(os.path.join(input_dir, "*.png")) + glob.glob(os.path.join(input_dir, "*.jpg")): # 打開原始圖像 im = Image.open(file_path) # 縮放圖像大小到指定大小 im_resized = im.resize(target_size, resample=Image.BILINEAR) # 拼接輸出路徑 output_path = os.path.join(output_dir, os.path.basename(file_path)) # 保存調整後的圖像到輸出目錄 im_resized.save(output_path)
3. 使用resize進行圖像縮放與拼接
大型圖像常常需要縮小和拼接才能方便地查看,PIL的resize方法可以很好地實現這一功能。下面的示例代碼將把一個大圖像分割成多個小圖像,並將它們依次排列拼接在一起:
from PIL import Image # 打開原始圖像 im = Image.open("example.png") # 分割圖像成4個子圖 sub_images = [] sub_images.append(im.crop((0, 0, im.size[0]//2, im.size[1]//2))) sub_images.append(im.crop((im.size[0]//2, 0, im.size[0], im.size[1]//2))) sub_images.append(im.crop((0, im.size[1]//2, im.size[0]//2, im.size[1]))) sub_images.append(im.crop((im.size[0]//2, im.size[1]//2, im.size[0], im.size[1]))) # 縮放子圖像 sub_images_resized = [x.resize((x.size[0]//2, x.size[1]//2), resample=Image.BILINEAR) for x in sub_images] # 計算輸出圖像大小 output_size = (im.size[0], im.size[1]//2*2) # 創建新的輸出圖像 output = Image.new(im.mode, output_size) # 拼接子圖像到輸出圖像 output.paste(sub_images_resized[0], (0, 0)) output.paste(sub_images_resized[1], (im.size[0]//2, 0)) output.paste(sub_images_resized[2], (0, im.size[1]//2)) output.paste(sub_images_resized[3], (im.size[0]//2, im.size[1]//2)) # 顯示調整後的圖像 output.show()
四、結語
本篇文章主要介紹了Python圖像處理庫PIL中的image.resize方法,包括resize方法的基本概念、參數詳解和實際應用場景。通過這些內容的講解,相信大家已經掌握了PIL中image.resize方法的基本使用方法和注意事項,可以輕鬆地對圖像進行縮放、裁剪和拼接等各種操作。
原創文章,作者:DJBEU,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/332706.html