Python是一門功能強大的編程語言,PIL(Python Imaging Library)是Python中一個擴展性的圖像處理包,可以輕鬆處理各種圖像。PILcrop是PIL中一個用於裁剪圖片尺寸的函數,下面將從多個方面詳細闡述Python PILcrop的使用方法。
一、PILcrop函數的介紹
PILcrop函數可以裁剪指定圖像的尺寸,語法如下:
im.crop(box)
其中,im是待處理的圖像,box是一個4元組(left, upper, right, lower),表示裁剪出的圖像區域。例如,(100, 100, 200, 200)表示從左上角起始坐標(100, 100)到右下角坐標(200, 200)的矩形區域。使用PILcrop,可以輕鬆地控制圖片的大小和位置。
二、使用PILcrop裁剪圖片
以下是使用PILcrop函數進行圖片裁剪的完整代碼:
from PIL import Image im = Image.open("example.jpg") box = (100, 100, 200, 200) region = im.crop(box) region.show()
在這段代碼中,我們首先使用Image.open函數讀取一張名為example.jpg的圖片,然後定義了一個4元組,表示裁剪出的矩形區域。接着,我們使用im.crop函數實現了裁剪操作,將裁剪出的圖像返回到region變量中。最後,我們使用region.show()函數展示裁剪出的圖像。
三、使用PILcrop批量處理圖片
在許多情況下,我們需要對一大批圖片進行尺寸裁剪。這時候,PILcrop可以極大地提高我們的工作效率。以下是使用PILcrop批量處理圖片的代碼:
from PIL import Image import os BASE_DIR = os.path.dirname(os.path.abspath(__file__)) images_dir = os.path.join(BASE_DIR, 'images') for filename in os.listdir(images_dir): if filename.endswith('.jpg'): im = Image.open(os.path.join(images_dir, filename)) box = (100, 100, 200, 200) region = im.crop(box) region.save(os.path.join(images_dir, 'cropped_' + filename))
在這段代碼中,我們首先獲得包含所有圖片的文件夾images_dir的路徑,並使用os.listdir函數遍歷文件夾中的所有文件。接着,我們使用if語句篩選出所有以.jpg為後綴名的圖片。對於每一張圖片,我們使用Image.open函數讀取圖片,然後使用im.crop函數進行圖片尺寸裁剪,最後使用region.save函數將裁剪後的圖片保存到原文件夾中,並重命名為cropped_原文件名。
四、使用PILcrop控制裁剪區域
除了通過定義4元組來控制裁剪區域外,我們還可以通過其他方式來控制裁剪的區域。例如,我們可以通過計算圖像的中心點來自動裁剪正中間的區域。以下是使用PILcrop自動裁剪正中間區域的代碼:
from PIL import Image import os BASE_DIR = os.path.dirname(os.path.abspath(__file__)) images_dir = os.path.join(BASE_DIR, 'images') for filename in os.listdir(images_dir): if filename.endswith('.jpg'): im = Image.open(os.path.join(images_dir, filename)) width, height = im.size crop_size = min(width, height) left = (width - crop_size) / 2 top = (height - crop_size) / 2 right = (width + crop_size) / 2 bottom = (height + crop_size) / 2 box = (left, top, right, bottom) region = im.crop(box) region.save(os.path.join(images_dir, 'cropped_' + filename))
在這段代碼中,我們首先使用im.size獲得當前圖片的尺寸信息,並計算出裁剪的大小crop_size。接着,我們使用簡單的算法計算出裁剪區域的左上角和右下角坐標。最後,使用im.crop函數裁剪出指定區域並保存。
五、PILcrop的透明處理
如果圖片中包含有透明部分的話,PILcrop函數會將這部分透明數據也一併複製進去。如果需要將透明部分刪除,則需要使用Image.alpha_composite函數。以下是將圖片中透明部分刪除並進行尺寸裁剪的代碼:
from PIL import Image import os BASE_DIR = os.path.dirname(os.path.abspath(__file__)) images_dir = os.path.join(BASE_DIR, 'images') for filename in os.listdir(images_dir): if filename.endswith('.png'): im = Image.open(os.path.join(images_dir, filename)) width, height = im.size crop_size = min(width, height) left = (width - crop_size) / 2 top = (height - crop_size) / 2 right = (width + crop_size) / 2 bottom = (height + crop_size) / 2 box = (left, top, right, bottom) region = im.crop(box) alpha = region.convert('RGBA').split()[-1] background = Image.new('RGBA', region.size, (255, 255, 255, 255)) background.paste(region, mask = alpha) background.save(os.path.join(images_dir, 'cropped_' + filename))
在此段代碼中,我們首先判斷傳入的圖片是否為png格式,並使用im.size獲得當前圖片的尺寸信息及計算出裁剪區域。接着,我們使用region.convert(‘RGBA’).split()[-1]獲取圖片的alpha通道信息,並使用Image.new(‘RGBA’, region.size, (255, 255, 255, 255))生成一個新的白色圖片。最後,我們使用paste函數根據alpha通道信息生成一張去除透明信息的新圖片,並將其保存。
以上是對Python PILcrop函數使用的詳細闡述,希望對讀者有所幫助。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/159661.html