python_PIL图片拼接,符合需求但不完美!!

Posted 佟大帅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python_PIL图片拼接,符合需求但不完美!!相关的知识,希望对你有一定的参考价值。

仅能符合需求的图片拼接工具。。。

使用第三方包为:

import tkinter as tk
from tkinter import Entry,Button
from tkinter import filedialog
from PIL import Image

工具的样子:

图片拼接示例
首先选择多个需要拼接的图片,然后回自动调整图片的宽度比,纵向拼接

 

拼接后就是这个样子

 

 

废话不多说直接给代码

# # -*- coding: utf-8 -*-
import tkinter as tk
from tkinter import Entry,Button
from tkinter import filedialog
from PIL import Image

window = tk.Tk()
# 标签
window.title(\'图片大小转换\')
# 初始化Entry
select_path = tk.StringVar()
# 文本框标签
tk.Label(window, text="文件路径:").grid(column=1, row=1, rowspan=4)
# 文件选择

def select_files():
    # 多个文件选择
    global selected_files_path
    selected_files_path = filedialog.askopenfilenames()  # askopenfilenames函数选择多个文件
    select_path.set(\'\\n\'.join(selected_files_path))  # 多个文件的路径用换行符隔开
# 对大图片进行缩放
def sort_big():
    # 图片存储列表
    sort_list=[]
    for filename in selected_files_path:
        try:
            img = Image.open(filename.replace(\'/\',\'\\\\\\\\\')) # 获取图片位置信息
            w = img.width  # 图片的宽
            h = img.height  # 图片的高
            f = img.format  # 图像格式
            sort_list.append(w)
            print(w)
        except:
            print(filename.replace(\'/\',\'\\\\\\\\\'))
    sort_list.sort()
    print(sort_list)
    # 图片宽度修改缩放
    for filename in selected_files_path:
        try:
            img = Image.open(filename.replace(\'/\',\'\\\\\\\\\')) # 获取图片位置信息
            w = img.width  # 图片的宽
            h = img.height  # 图片的高
            new_img = img.resize((sort_list[0], int(h*(sort_list[0]/w))), Image.ANTIALIAS)
            save_dir=filename.replace(filename.split(\'/\')[-1], \'new\' + filename.split(\'/\')[-1]) #图片的保存地址
            new_img.save(save_dir)
        except:
            print(r\'文件\'+filename+\'失败\')
    h = 0
    w = 0
    hr = 0
    for img in range(len(selected_files_path)):
        # 定义拼接图片
        star_img=selected_files_path[img].replace(\'/\', \'\\\\\')
        new_im=star_img.replace(star_img.split(\'\\\\\')[-1],\'new\' + star_img.split(\'\\\\\')[-1])
        imgs = Image.open(new_im)
        h = h + int(imgs.size[1])
        w = int(imgs.size[0])
    joint = Image.new("RGB", (w, h))
    for img_tr in range(len(selected_files_path)):
        # 拼接图片
        star_img = selected_files_path[img_tr].replace(\'/\', \'\\\\\')
        new_im = star_img.replace(star_img.split(\'\\\\\')[-1], \'new\' + star_img.split(\'\\\\\')[-1])
        img_trs = Image.open(new_im)
        joint.paste(img_trs, (0, hr))
        hr = hr + int(img_trs.size[1])
    joint.save(\'拼接后图片.png\')
# Entry文本框
path = Entry(window, textvariable=select_path).grid(column=2, row=1, rowspan=4)
# 文件选择按钮
Button(window, text="选择多个图片", command=select_files).grid(row=2, column=4)
# 图片拼接按钮
Button(window, text="开始拼接", command=sort_big).grid(row=3, column=4)
window.mainloop()

 

Python实现将多张图片拼接为一张

文章目录

一、需求

将多个这样的图片进行拼接为一张

拼接效果:

更多照片张数同理

二、代码

import PIL.Image as Image
import os

IMAGES_PATH = 'img\\\\test\\\\'  # 图片集地址

IMAGES_FORMAT = ['.png', '.jpg']  # 图片格式
IMAGE_SIZE = 224  # 每张小图片的大小
IMAGE_ROW = 1  # 图片间隔,也就是合并成一张图后,一共有几行
IMAGE_COLUMN = 2  # 图片间隔,也就是合并成一张图后,一共有几列
IMAGE_SAVE_PATH = 'img/to1.jpg'  # 图片转换后的地址

# 获取图片集地址下的所有图片名称
image_names = [name for name in os.listdir(IMAGES_PATH) for item in IMAGES_FORMAT if
               os.path.splitext(name)[1] == item]

print(image_names)
# 简单的对于参数的设定和实际图片集的大小进行数量判断
if len(image_names) != IMAGE_ROW * IMAGE_COLUMN:
    raise ValueError("合成图片的参数和要求的数量不能匹配!")


# 定义图像拼接函数
def image_compose():
    to_image = Image.new('RGB', (IMAGE_COLUMN * IMAGE_SIZE, IMAGE_ROW * IMAGE_SIZE))  # 创建一个新图
    # 循环遍历,把每张图片按顺序粘贴到对应位置上
    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, IMAGE_SIZE), Image.ANTIALIAS)
            to_image.paste(from_image, ((x - 1) * IMAGE_SIZE, (y - 1) * IMAGE_SIZE))
    return to_image.save(IMAGE_SAVE_PATH)  # 保存新图


image_compose()  # 调用函数

以上是关于python_PIL图片拼接,符合需求但不完美!!的主要内容,如果未能解决你的问题,请参考以下文章

Python实现将多张图片拼接为一张

连接表但不显示符合 where 子句的行

图片怎么合并在一起 怎么将两张图片合并在一起

网络请求&网络图片

拼接素数

我如何解释这个看似函数声明但不符合通常模式的声明?