拼接多张图片
这篇文章会使用 Python 的 Pillow 第三方函数库,将多张图片拼接成一张大张的图片,在拼接的过程中,替每张图片加上边框效果。
快速导览:
- 本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
- 使用 Colab 操作需要连动 Google 云端硬盘,请参考:连动 Google Drive
安装 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 不支援直接顯示,如果使用本機環境會開啟圖片檢視器
如果储存的图片为 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')
使用 paste 拼接多张图片
产生一张空白的图像后,使用 for 循环的方式,依序打开需要拼贴的图片,透过 resize 改变图片尺寸,再利用 paste 的方法将打开的图片,贴到空白的图像上,就可以实现拼接多张图片的效果,下方的程序执行后,会依序打开八张图片 ( 档名是 d1.jpg~d8.jpg ),打开后将图片拼贴到空白图像里。
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')
替拼接的图片加上边框
使用 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')
微信扫码关注
抖音扫码关注