詳解基于python的多張不同寬高圖片拼接成大圖
半年前寫過一篇將多張圖片拼接成大圖的博客,是講的把所有圖片先轉換為256×256的圖片后再進行拼接,今天看到一個朋友的評論說如何拼接非正方形圖片,如47×57,之前有個朋友也問過這個,我當時理解錯了,以為是要把不同尺寸的照片如32×45、56×75等拼接成大圖,當時還納悶,那不是很難看嗎,還得填充非圖片元素,emmm,只怪當年太天真。。
于是乎搞了下非方形圖片的拼接,上代碼:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import PIL.Image as Image
import os
IMAGES_PATH = 'D:\Mafengwo\photo\五月坦桑的暖風,非洲原野的呼喚\\' # 圖片集地址
IMAGES_FORMAT = ['.jpg', '.JPG'] # 圖片格式
IMAGE_SIZE_W = 47 # 每張小圖片的寬
IMAGE_SIZE_H = 57 # 每張小圖片的高
IMAGE_ROW = 5 # 圖片間隔,也就是合并成一張圖后,一共有幾行
IMAGE_COLUMN = 4 # 圖片間隔,也就是合并成一張圖后,一共有幾列
IMAGE_SAVE_PATH = 'final.jpg' # 圖片轉換后的地址
# 獲取圖片集地址下的所有圖片名稱
image_names = [name for name in os.listdir(IMAGES_PATH) for item in IMAGES_FORMAT if
os.path.splitext(name)[1] == item]
# 簡單的對于參數(shù)的設定和實際圖片集的大小進行數(shù)量判斷
if len(image_names) != IMAGE_ROW * IMAGE_COLUMN:
raise ValueError("合成圖片的參數(shù)和要求的數(shù)量不能匹配!")
# 定義圖像拼接函數(shù)
def image_compose():
to_image = Image.new('RGB', (IMAGE_COLUMN * IMAGE_SIZE_W, IMAGE_ROW * IMAGE_SIZE_H)) # 創(chuàng)建一個新圖
# 循環(huán)遍歷,把每張圖片按順序粘貼到對應位置上
for y in range(1, IMAGE_ROW + 1):
for x in range(1, IMAGE_COLUMN + 1):
from_image = Image.open(IMAGES_PATH + image_names[IMAGE_COLUMN * (y - 1) + x - 1]).resize(
(IMAGE_SIZE_W, IMAGE_SIZE_H), Image.ANTIALIAS)#重塑(統(tǒng)一)照片的大小
to_image.paste(from_image, ((x - 1) * IMAGE_SIZE_W, (y - 1) * IMAGE_SIZE_H))
# im.paste(image, position)---粘貼image到im的position(左上角)位置。
return to_image.save(IMAGE_SAVE_PATH) # 保存新圖
image_compose() # 調(diào)用函數(shù)
對比之前的博客,沒有改動太多,只是太久沒看了,又梳理了一遍,把之前的方形圖片的邊長IMAGE_SIZE拆分成了矩形的長和寬,當然習慣稱之為高和寬
這里需要注意的就是下面兩處用到IMAGE_SIZE_W和IMAGE_SIZE_H的地方,注釋已經(jīng)說清楚了,我們先是把需要拼接的各種尺寸的圖片統(tǒng)一塑形為47×57大小的圖片,然后依次粘貼到我們創(chuàng)建的新圖中,這里的paste方法中位置指的是圖片的左上角,從該處粘貼一張IMAGE_SIZE_W×IMAGE_SIZE_H大小的圖片,他這個順序就是從第一行開始依次粘貼,只不過位置是從0開始的,可以理解成一次粘貼到(0,0),(0,1),(0,2)…………(1,0),(1,1)…………位置上,區(qū)別的就是我們這里粘貼的不是一個點而是一張有寬高的圖片,所以第一張圖片粘貼位置是(0,0),第二張是(IMAGE_SIZE_W,0),第三張是(IMAGE_SIZE_W*2,0)就這么先搞定第一行再走第二行,一直這么下去。。
還是原來的圖片,看下不同的效果:

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Python利用標簽實現(xiàn)清理微信好友的自動化腳本
微信已經(jīng)成為我們?nèi)粘I钪胁豢苫蛉钡纳缃还ぞ?隨著使用時間的增長,我們的微信好友列表可能會變得越來越臃腫,所以本文為大家準備了通過標簽清理微信好友的Python自動化腳本,希望對大家有所幫助2024-12-12
使用Selenium在Python中實現(xiàn)錄屏功能
Selenium 是一個強大的用于自動化測試的工具,但你知道它也可以用來錄制瀏覽器操作的視頻嗎?本文將介紹如何使用 Selenium 在 Python 中實現(xiàn)錄屏功能,以便記錄和分享你的網(wǎng)頁操作過程,需要的朋友可以參考下2023-11-11
python使用tensorflow保存、加載和使用模型的方法
本篇文章主要介紹了python使用tensorflow保存、加載和使用模型的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01
Python 使用os.remove刪除文件夾時報錯的解決方法
下面小編就為大家?guī)硪黄狿ython 使用os.remove刪除文件夾時報錯的解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01
Pandas中數(shù)據(jù)表合并的幾種實現(xiàn)方法
Pandas提供了merge()、concat()和join()三種方法來合并數(shù)據(jù)表,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-12-12
python+pytest接口自動化之日志管理模塊loguru簡介
python中有一個用起來非常簡便的第三方日志管理模塊--loguru,不僅可以避免logging的繁瑣配置,而且可以很簡單地避免在logging中多進程多線程記錄日志時出現(xiàn)的問題,甚至還可以自定義控制臺輸出的日志顏色,接下來我們來學習怎么使用loguru模塊進行日志管理2022-05-05

