使用Python - Pillow庫生成方形或圓形縮圖
縮圖在各種應用中廣泛使用,以簡潔且具有視覺吸引力的方式呈現照片。它們是緊湊的壓縮影像,忠實地再現了原始影像,使使用者能夠快速輕鬆地瀏覽大量照片。
Python 非常流行,可用於影像處理和操作。一個知名的用於處理影像的 Python 庫是 Python Imaging Library (PIL),現在稱為 Pillow,它提供了許多工具來執行各種影像處理操作,例如裁剪、調整大小和應用濾鏡。
方法
生成方形縮圖
生成圓形縮圖
使用ImageOps.fit()生成圓形縮圖
先決條件
在繼續之前,我們需要安裝一些 Python 庫。我們將使用以下命令安裝 Pillow 和 numpy 庫:
pip install pillow pip install numpy
在檢視生成方形或圓形縮圖的方法之前,首先我們需要了解如何使用 Python 中的 Pillow 庫開啟縮圖影像。讓我們來看一個例子
示例
# importing the required libraries
from PIL import Image
# opening the image
image=Image.open('spiderman.jpg')
# resize image
img.thumbnail((width, height))
# save thumbnail image
img.save('thumbnail_image.jpg')
# showing the image using show() function
image.show()
輸出
我們已成功使用上述程式碼打開了縮圖影像。
方法一:生成方形縮圖
演算法
從 Pillow 庫匯入必要的模組:Image。
使用 Image.open() 方法載入原始影像。
使用 size 屬性確定原始影像的尺寸。
透過將寬度除以高度,確定原始影像的縱橫比。
將所需的寬度或高度(以較小者為準)設定為正方形的邊長,以確定縮圖影像的大小。
計算要裁剪的原始影像區域的大小。如果原始影像的縱橫比大於 1(即寬度大於高度),則裁剪影像的頂部和底部,使其高度與縮圖的寬度相同。如果縱橫比小於 1(即高度大於寬度),則裁剪影像的兩側,使其寬度與縮圖的高度相同。
使用 crop() 方法裁剪原始影像的一部分。
使用 thumbnail() 方法將裁剪後的影像調整為所需大小。
使用 save() 方法儲存方形縮圖影像。
步驟 1:- 從 PIL(Python Imaging Library)包匯入 Image 模組。
from PIL import Image
步驟 2:- 開啟原始影像檔案。
img = Image.open('spiderman.jpg')
步驟 3:- 調整影像大小,同時保持縱橫比。
img.thumbnail((2000, 2000))
步驟 4:- 確定調整大小後圖像的尺寸。
width, height = img.size
步驟 5:- 計算要裁剪的區域的座標,以獲得正方形形狀,同時保留原始影像的中心。如果原始影像的寬度大於高度,則裁剪影像的左右兩側。否則,裁剪影像的頂部和底部。crop() 方法需要裁剪區域的左、上、右和下座標,因此我們可以計算這些值。
if width > height: left = (width - height) / 2 right = (width + height) / 2 top = 0 bottom = height else: left = 0 right = width top = (height - width) / 2 bottom = (height + width) / 2
步驟 6:- 使用上面計算的座標裁剪影像,以獲得正方形形狀。
img = img.crop((left, top, right, bottom))
步驟 7:- 將方形縮圖影像儲存到檔案。
img.save('square_thumbnail.jpg')
步驟 8:- 使用 show() 方法顯示影像。
img.show()
示例
# importing the required libraries
from PIL import Image
# open image file
img = Image.open('spiderman.jpg')
# resize image
img.thumbnail((2000, 2000))
# crop image to square shape
width, height = img.size
if width > height:
left = (width - height) / 2
right = (width + height) / 2
top = 0
bottom = height
else:
left = 0
right = width
top = (height - width) / 2
bottom = (height + width) / 2
img = img.crop((left, top, right, bottom))
# save square thumbnail image
img.save('square_thumbnail.jpg')
# showing the image using show() function
img.show()
輸出

方法二- 生成圓形縮圖
在本方法中,我們將學習如何建立圓形縮圖,我們可以先調整原始影像的大小,然後建立一個與縮圖大小相同的圓形蒙版,並將調整大小的影像貼上到蒙版上。為此,我們將使用以下演算法
從 Pillow 庫匯入必要的模組:Image 和 ImageDraw。
使用 Image.open() 方法載入原始影像。
使用 size 屬性確定原始影像的尺寸。
使用 ImageDraw.Draw() 方法從蒙版影像建立新物件。
使用 draw.ellipse() 方法在蒙版影像上繪製一個橢圓。將影像居中到橢圓的中心。
使用 Image.new() 方法建立一個與原始影像尺寸相同,具有透明背景的新影像。
使用 paste() 方法將原始影像貼上到新影像上,從而為新影像賦予圓形邊緣。
使用 save() 方法儲存方形縮圖影像。
步驟 1:- 從 Pillow 庫匯入必要的模組:Image 和 ImageDraw。
from PIL import Image, ImageDraw
步驟 2:- 使用 open() 方法開啟影像並將其儲存在變數中。
img = Image.open('spiderman.jpg')
步驟 3:- 使用 thumbnail() 方法調整影像大小。
img.thumbnail((2000, 2000))
步驟 4:- 使用 Image.new() 方法建立一個與原始影像尺寸相同的新灰度影像。
mask = Image.new('L', img.size, 0)
步驟 5:- 使用 ImageDraw.Draw() 方法從蒙版影像建立新物件。
draw = ImageDraw.Draw(mask)
步驟 6:- 使用 draw.ellipse() 方法在蒙版影像上繪製一個橢圓。橢圓應位於影像的中心。
draw.ellipse((0, 0, img.size[0], img.size[1]), fill=255)
步驟 7:- 使用 Image.new() 方法從原始影像生成新影像。
result = Image.new('RGBA', img.size, (255, 255, 255, 0))
步驟 8:- 使用 paste() 方法將原始影像貼上到新影像上。使用 mask 引數作為透明蒙版,使影像邊緣呈圓形。
result.paste(img, (0, 0), mask)
步驟 9:- 使用 save() 方法將生成的影像儲存為 PNG 檔案。
result.save('circular_thumbnail.png')
步驟 10:- 使用 show() 方法顯示生成的影像。
result.show()
示例
# importing the required libraries
from PIL import Image, ImageDraw
# open image file
img = Image.open('sipderman.jpg')
# resize image
img.thumbnail((2000, 2000))
# create circular mask
mask = Image.new('L', img.size, 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((0, 0, img.size[0], img.size[1]), fill=255)
# apply mask to image
result = Image.new('RGBA', img.size, (255, 255, 255, 0))
result.paste(img, (0, 0), mask)
# save circular thumbnail image
result.save('circular_thumbnail.png')
# showing the image using show() function
result.show()
輸出

方法三:使用 ImageOps.fit() 生成圓形縮圖
在本方法中,我們將學習如何使用 ImageOps 建立圓形縮圖。為此,我們將使用以下演算法
從 Pillow 庫匯入必要的模組:Image、ImageOps 和 ImageDraw。
使用 Image.open() 方法載入原始影像。
使用 ImageOps.fit() 方法將影像調整為所需大小。
使用 Image.new() 方法為圓形蒙版建立一個新影像。將新影像的模式設定為“L”,代表灰度。
建立一個新的 ImageDraw.Draw() 物件,並使用它透過 draw.ellipse() 方法在圓形蒙版上繪製一個橢圓
使用 img.putalpha() 方法將圓形蒙版應用於調整大小的影像。此方法將影像的 alpha 通道設定為蒙版影像,這使得橢圓外的所有畫素都完全透明。
使用 save() 方法儲存方形縮圖影像。
步驟 1:- 匯入必要的庫
from PIL import Image, ImageOps, ImageDraw
步驟 2:- 從檔案路徑開啟影像檔案
img = Image.open('spiderman.jpg')
步驟 3:- 使用 ImageOps.fit() 方法調整影像大小。
img = ImageOps.fit(img, (300, 300))
步驟 4:- 建立一個您想要的首選大小的圓形蒙版,並用黑色填充它
mask = Image.new('L', (300, 300), 0)
步驟 5:- 為蒙版建立一個 Draw 物件,並使用白色繪製一個橢圓以填充圓形形狀
draw = ImageDraw.Draw(mask) draw.ellipse((0, 0, 300, 300), fill=255)
步驟 6:- 使用 putalpha() 方法將蒙版應用於原始影像,該方法根據蒙版設定每個畫素的 alpha 通道。
img.putalpha(mask)
步驟 7:- 使用 save() 方法將生成的影像儲存為 PNG 檔案。
img.save('circular_thumbnail.png')
步驟 8:- 使用 show() 方法顯示生成的影像。
img.show()
示例
# importing the required libraries
from PIL import Image, ImageOps, ImageDraw
# open image file
img = Image.open('spiderman.jpg')
# resize image to a square
img = ImageOps.fit(img, (300, 300))
# create circular mask
mask = Image.new('L', (300, 300), 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((0, 0, 300, 300), fill=255)
# apply mask to image
img.putalpha(mask)
# save circular thumbnail image
img.save('circular_thumbnail.png')
# showing the image using show() function
img.show()
輸出

結論
在本文中,我們介紹了三種使用Pillow建立方形或圓形縮圖影像的不同方法。每種方法都有其優點和缺點,最佳方法將取決於您的應用程式的具體需求。您可以透過使用這些方法快速建立視覺效果良好的縮圖影像,用於您的網路應用程式、社交網路平臺和照片庫。
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP