詳解基于python的多張不同寬高圖片拼接成大圖
半年前寫(xiě)過(guò)一篇將多張圖片拼接成大圖的博客,是講的把所有圖片先轉(zhuǎn)換為256×256的圖片后再進(jìn)行拼接,今天看到一個(gè)朋友的評(píng)論說(shuō)如何拼接非正方形圖片,如47×57,之前有個(gè)朋友也問(wèn)過(guò)這個(gè),我當(dāng)時(shí)理解錯(cuò)了,以為是要把不同尺寸的照片如32×45、56×75等拼接成大圖,當(dāng)時(shí)還納悶,那不是很難看嗎,還得填充非圖片元素,emmm,只怪當(dāng)年太天真。。
于是乎搞了下非方形圖片的拼接,上代碼:
#!/usr/bin/env python # -*- coding:utf-8 -*- import PIL.Image as Image import os IMAGES_PATH = 'D:\Mafengwo\photo\五月坦桑的暖風(fēng),非洲原野的呼喚\\' # 圖片集地址 IMAGES_FORMAT = ['.jpg', '.JPG'] # 圖片格式 IMAGE_SIZE_W = 47 # 每張小圖片的寬 IMAGE_SIZE_H = 57 # 每張小圖片的高 IMAGE_ROW = 5 # 圖片間隔,也就是合并成一張圖后,一共有幾行 IMAGE_COLUMN = 4 # 圖片間隔,也就是合并成一張圖后,一共有幾列 IMAGE_SAVE_PATH = 'final.jpg' # 圖片轉(zhuǎn)換后的地址 # 獲取圖片集地址下的所有圖片名稱 image_names = [name for name in os.listdir(IMAGES_PATH) for item in IMAGES_FORMAT if os.path.splitext(name)[1] == item] # 簡(jiǎn)單的對(duì)于參數(shù)的設(shè)定和實(shí)際圖片集的大小進(jìn)行數(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)建一個(gè)新圖 # 循環(huán)遍歷,把每張圖片按順序粘貼到對(duì)應(yīng)位置上 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ù)
對(duì)比之前的博客,沒(méi)有改動(dòng)太多,只是太久沒(méi)看了,又梳理了一遍,把之前的方形圖片的邊長(zhǎng)IMAGE_SIZE拆分成了矩形的長(zhǎng)和寬,當(dāng)然習(xí)慣稱之為高和寬
這里需要注意的就是下面兩處用到IMAGE_SIZE_W和IMAGE_SIZE_H的地方,注釋已經(jīng)說(shuō)清楚了,我們先是把需要拼接的各種尺寸的圖片統(tǒng)一塑形為47×57大小的圖片,然后依次粘貼到我們創(chuàng)建的新圖中,這里的paste方法中位置指的是圖片的左上角,從該處粘貼一張IMAGE_SIZE_W×IMAGE_SIZE_H大小的圖片,他這個(gè)順序就是從第一行開(kāi)始依次粘貼,只不過(guò)位置是從0開(kāi)始的,可以理解成一次粘貼到(0,0),(0,1),(0,2)…………(1,0),(1,1)…………位置上,區(qū)別的就是我們這里粘貼的不是一個(gè)點(diǎn)而是一張有寬高的圖片,所以第一張圖片粘貼位置是(0,0),第二張是(IMAGE_SIZE_W,0),第三張是(IMAGE_SIZE_W*2,0)就這么先搞定第一行再走第二行,一直這么下去。。
還是原來(lái)的圖片,看下不同的效果:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
解決python訪問(wèn)報(bào)錯(cuò):jinja2.exceptions.TemplateNotFound:index.html
這篇文章主要介紹了解決python訪問(wèn)報(bào)錯(cuò):jinja2.exceptions.TemplateNotFound:index.html,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12python網(wǎng)絡(luò)編程實(shí)例簡(jiǎn)析
這篇文章主要介紹了python網(wǎng)絡(luò)編程,有不錯(cuò)的借鑒價(jià)值,需要的朋友可以參考下2014-09-09python實(shí)現(xiàn)的登錄與提交表單數(shù)據(jù)功能示例
這篇文章主要介紹了python實(shí)現(xiàn)的登錄與提交表單數(shù)據(jù)功能,結(jié)合實(shí)例形式分析了Python表單登錄相關(guān)的請(qǐng)求與響應(yīng)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-09-09Python2和Python3之間的str處理方式導(dǎo)致亂碼的講解
今天小編就為大家分享一篇關(guān)于Python2和Python3之間的str處理方式導(dǎo)致亂碼的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01Python?copy()與deepcopy()方法之間有什么區(qū)別
這篇文章主要介紹了Python中的copy()和deepcopy(),下面詳細(xì)介紹該內(nèi)容并附上詳細(xì)代碼,需要的朋友可以參考一下文章的具體內(nèi)容,希望對(duì)你有所幫助2022-10-10Python 時(shí)間戳之獲取整點(diǎn)凌晨時(shí)間戳的操作方法
這篇文章主要介紹了Python 時(shí)間戳之獲取整點(diǎn)凌晨時(shí)間戳的操作方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-01-01全網(wǎng)最細(xì) Python 格式化輸出用法講解(推薦)
這篇文章主要介紹了全網(wǎng)最細(xì) Python 格式化輸出用法講解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01手把手教你如何用Pycharm2020.1.1配置遠(yuǎn)程連接的詳細(xì)步驟
這篇文章主要介紹了如何用Pycharm2020.1.1配置遠(yuǎn)程連接,分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-08-08