iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0

這篇文章會使用 Python 的 Pillow 第三方函式庫,將多張圖片拼接成一張大張的圖片,在拼接的過程中,替每張圖片加上邊框效果。

原文參考:拼接多張圖片

Python 教學 - 拼接多張圖片

安裝 Pillow

輸入下列指令安裝 Pillow,根據個人環境使用 pip 或 pip3,如果使用 Colab 或 Anaconda Jupyter,已經內建 Pillow 函式庫。

!pip install Pillow

產生全新的空白圖片

使用 Pillow 函式庫裡 Image.new() 的方法,可以產生一張指定大小的圖片,使用方法如下:

from PIL import Image
img = Image.new(mode, size, color)
# mode 色彩模式,可使用 RGB 或 RGBA
# size 長寬尺寸,tuple 格式 ( 寬, 長 )
# color 顏色,預設黑色 #000000

下方的程式碼執行後,會產生一張 400x300 背景全紅的圖片。

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')  # Colab 換路徑使用

from PIL import Image
bg = Image.new('RGB',(400, 300), '#ff0000')         # 產生 RGB 色域,400x300 背景紅色的圖片
bg.save('oxxostudio.jpg')
# bg.show()  # Colab 不支援直接顯示,如果使用本機環境會開啟圖片檢視器

Python 教學 - 拼接多張圖片

如果儲存的圖片為 png 格式,可以使用 RGBA 色域,產生半透明或全透明的圖片

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')  # Colab 換路徑使用

from PIL import Image
bg = Image.new('RGB',(400, 300), '#ff000055')    # 產生 RGBA 色域,400x300 背景半透明紅色的圖片
bg.save('oxxostudio.png')

Python 教學 - 拼接多張圖片

使用 paste 拼接多張圖片

產生一張空白的影像後,使用 for 迴圈的方式,依序開啟需要拼貼的圖片,透過 resize 改變圖片尺寸,再利用 paste 的方法將開啟的圖片,貼到空白的影像上,就可以實現拼接多張圖片的效果,下方的程式執行後,會依序開啟八張圖片 ( 檔名是 d1.jpg~d8.jpg ),開啟後將圖片拼貼到空白影像裡。

相關教學參考:重複迴圈 ( for、while )

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')  # Colab 換路徑使用

from PIL import Image
bg = Image.new('RGB',(1200, 800), '#000000') # 產生一張 1200x800 的全黑圖片
for i in range(1,9):
    img = Image.open(f'd{i}.jpg')  # 開啟圖片
    img = img.resize((300, 400))   # 縮小尺寸為 300x400
    x = (i-1)%4                    # 根據開啟的順序,決定 x 座標
    y = (i-1)//4                   # 根據開啟的順序,決定 y 座標 ( // 為快速取整數 )
    bg.paste(img,(x*300, y*400))   # 貼上圖片

bg.save('oxxostudio.jpg')

Python 教學 - 拼接多張圖片

替拼接的圖片加上邊框

使用 Pillow ImageOps 模組裡的 expand 方法,能夠以指定的顏色,將影像的四個邊擴展出去,實現邊框的效果,使用方法如下:

from PIL import Image, ImageOps
img = ImageOps.expand(image , border, fill)
# image 來源影像
# border 四個邊擴張的數值,使用 tuple 格式 (左, 上, 右, 下),如果只有一個數值,則四個邊都會套用同樣的數值

延伸上方的程式碼,在讀取每一張影像時替影像加入邊框,最後就可以做出有白色分隔的拼貼圖片效果。

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')  # Colab 換路徑使用

from PIL import Image, ImageOps
bg = Image.new('RGB',(1240, 840), '#000000')   # 因為擴張,所以將尺寸改成 1240x840
for i in range(1,9):
    img = Image.open(f'd{i}.jpg')
    img = img.resize((300, 400))
    img = ImageOps.expand(img, 20, '#ffffff')  # 擴張邊緣,產生邊框
    x = (i-1)%4
    y = (i-1)//4
    bg.paste(img,(x*300, y*400))

bg.save('oxxostudio.jpg')

Python 教學 - 拼接多張圖片

小結

如果有多張圖片想要拼接,不如試試看使用 Python 來達成任務吧!

更多 Python 教學

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我已經寫了超過 400 篇 Python 的教學,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 5 ) 裁切與旋轉圖片
下一篇
( Day 7 ) 圖片加上 logo 浮水印
系列文
學 Python 到底可以幹麻勒?41
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言