【问题标题】:to merge images with condition less than height 2450 pixel by using python, tkinter使用 python、tkinter 合并条件小于高度 2450 像素的图像
【发布时间】:2020-07-21 14:48:18
【问题描述】:

我做了一个程序来合并图像,我想升级这个程序,图像的总高度应该小于 2450 像素并保存每个合并的图像。

import os
import tkinter.ttk as ttk
import  tkinter.messagebox as msgbox
from tkinter import *    # __all__
from tkinter import filedialog
from PIL import  Image

# add file
def add_file():
files = filedialog.askopenfilenames(title="이미지 파일을 선택하세요", \
    filetypes =(('jpg 파일', '*.jpg'), ('모든 파일', '*.*')), \
    initialdir='D:/jh/사업/프로그램/파이썬 이미지 합치기 프로그램/image')
    
# file list that user can select
for file in files:
    list_file.insert(END, file)



# file frame(file add, selected file delete)
file_frame = Frame(root)
file_frame.pack(fill='x', padx=5, pady=5)

btn_add_file = Button(file_frame, padx=5, pady=5, width=12, text='파일추가', command=add_file)
btn_add_file.pack(side='left')

btn_del_file = Button(file_frame, padx=5, pady=5, width=12, text='선택삭제', command=del_file)
btn_del_file.pack(side='right')

# list frame
list_frame = Frame(root)
list_frame.pack(fill='both', padx=5, pady=5)

scrollbar = Scrollbar(list_frame)
scrollbar.pack(side='right', fill='y')

list_file = Listbox(list_frame, selectmode='extended', height=12, yscrollcommand=scrollbar.set)
list_file.pack(side='left', fill='both', expand=True)
scrollbar.config(command=list_file.yview)

.....

 dest_path = os.path.join(txt_dest_path.get(), txt_file.get())   
 # txt_file get values after to input entry for file name. ex) desk 
 result_img.save(dest_path)   #save result_img to dest_path
 msgbox.showinfo('알림', '작업이 완료되었습니다.') 

在此编码中,list_file 是 Listbox,并且有几张宽度相同但高度不同的图像。我想合并这张图片,但合并后的图片高度不能超过 2450 像素。

例如,list_file 是 a0、a1、a2、a3、a4、a5、a6。 list_file 中图像的高度为 200, 1500, 2400, 100, 300, 500, 1600. 那么 list_file 应该 a0

我想获取条目值并保存 list_file 的每个图像。例如入口值为desk,文件名应为desk 001.jpg、desk 002.jpg、desk 003.jpg、desk 004.jpg等

【问题讨论】:

  • 您已经告诉我们您想要什么,但没有解释您需要什么帮助。你有什么问题阻止你这样做?
  • 其实我想通过合并图片来改变list_file并保存list_file。但是,我不知道该怎么做。
  • Listbox里面怎么插入图片?还是Listbox里面只有图片的文件名?
  • 我添加了关于如何将图像插入列表框的编码。它有路径+文件名。

标签: python tkinter merge python-imaging-library tkinter-entry


【解决方案1】:

您可以使用Image.new(...)创建合并图像,然后使用Image.paste(...)将所需图像复制到合并图像中:

def merge_images(imagelist, width, height, seqno):
    if imagelist:
        # create the merged image
        merged_image = Image.new('RGB', (width, height), (0,0,0))
        y = 0
        for image in imagelist:
            merged_image.paste(image, (0, y))
            y += image.height
        # save the merged image
        dest_path = os.path.join(txt_dest_path.get(), 'desk%03d.jpg' % seqno)
        merged_image.save(dest_path)
        seqno += 1
    return seqno

def merge():
    MAX_HEIGHT = 2450
    merge_list = []
    height = 0
    width = None
    seqno = 1
    for file in list_file.get(0, 'end'):
        image = Image.open(file)
        if width is None:
            width = image.width
        if height+image.height <= MAX_HEIGHT:
            merge_list.append(image)
            height += image.height
        else:
            seqno = merge_images(merge_list, width, height, seqno)
            merge_list = [image]
            height = image.height

    merge_images(merge_list, width, height, seqno)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多