首页 > 编程语言 >python_PIL图片拼接,符合需求但不完美!!

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

时间:2023-04-06 23:56:42浏览次数:41  
标签:files PIL img python 拼接 new path 图片

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

使用第三方包为:

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()

 

标签:files,PIL,img,python,拼接,new,path,图片
From: https://www.cnblogs.com/t-dashuai/p/17294642.html

相关文章

  • Python 异步: 常见问题 Part_1(23)
    动动发财的小手,点个赞吧!本节回答开发人员在Python中使用asyncio时提出的常见问题。1.如何停止任务?我们可以通过asyncio.Task对象上的cancel()方法取消任务。如果任务被取消,cancel()方法返回True,否则返回False。...#cancelthetaskwas_cancelled=task.cancel......
  • 每日总结2023/4/6(python实现分型图形设计)
    importrandomimportturtleturtle.speed(100)defke_line(line_,n):ifn==0:turtle.fd(line_)else:line_len=line_//3foriin[0,60,-120,60]:turtle.left(i)ke_line(line_len,n-1)#原始线......
  • Python + edge-tts:一行代码,让你的文本轻松变成语音!
    大家好,我是树先生!今天给大家介绍一个Python库edge-tts,可以在本地轻松将文本转换成语音,非常方便,并且完全免费!先来听一下效果:https://www.bilibili.com/audio/au3843189?type=1怎么样?是不是很熟悉,影视解说中常用开头:这个女人叫小美。。。 edge-tts介绍edge-tts是一个Py......
  • Python ORM Pony SQLite数据库 常用操作
    Pony是一个高级的对象关系映射器ORM框架。Pony它能够使用Python生成器表达式和lambdas向数据库编写查询。Pony分析表达式的抽象语法树,并将其转换为SQL查询。支持SQLite,MySQL,PostgreSQL和Oracle等数据库,本文主要介绍PythonORMPony中SQLite数据库常用操作,及数据增加、删除、修......
  • P8712 [蓝桥杯 2020 省 B1] 整数拼接
    P8712[蓝桥杯2020省B1]整数拼接https://www.luogu.com.cn/problem/P8712这题想多了一步。。不需要求逆元,因为最多9位数,所以直接\(O(10n)\)记录乘积的模值注意不能用map#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintN=1e5+5;ll......
  • Python生成随机验证码
    pipinstallpillow 实现代码importrandomfromPILimportImage,ImageDraw,ImageFont,ImageFilterdefcheck_code(width=120,height=30,char_length=5,font_file='kumo.ttf',font_size=28):code=[]img=Image.new(mode='RGB',si......
  • 蓝桥杯——整数拼接
    整数拼接   测试用例:421234题解:#include<bits/stdc++.h>usingnamespacestd;longlonga[100010];longlongf[11][100010];//余数数组,表示a[i]*10^r%k的个数longlongres;intmain(){longlongn,k;cin>>n>>k;for(inti=0;i<......
  • 02:python-函数
     正文#1:调用内置函数#调用绝对值函数abs()intAbs=abs(-20)print(intAbs)#调用最大函数intMax=max(1,2,-1,10)print(intMax)#数据类型转换print(int('124'))#字符串转intprint(int(12.34))#float转intprint(str(12.34))#float转字符串......
  • Python小练习:权重初始化(Weight Initialization)
    Python小练习:权重初始化(WeightInitialization)作者:凯鲁嘎吉-博客园 http://www.cnblogs.com/kailugaji/调用Pytorch中的torch.nn.init.xxx实现对模型权重与偏置初始化。1.weight_init_test.py1#-*-coding:utf-8-*-2#Author:凯鲁嘎吉CoralGajic3#https://w......
  • 【转】python pip 换源阿里云
    via:pythonpip换源阿里云-知乎(zhihu.com)pip换源阿里云只需要在cmd输入一条命令:pipconfigsetglobal.index-urlhttps://mirrors.aliyun.com/pypi/simple ......