亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 python,tkinter 合并條件小于 2450 像素的圖像

使用 python,tkinter 合并條件小于 2450 像素的圖像

蝴蝶不菲 2023-03-22 16:48:53
我做了一個合并圖像的程序,我想升級這個程序,使圖像的總高度應小于 2450 像素,并保存每個合并的圖像。import osimport tkinter.ttk as ttkimport  tkinter.messagebox as msgboxfrom tkinter import *    # __all__from tkinter import filedialogfrom PIL import  Image# add filedef add_file():files = filedialog.askopenfilenames(title="??? ??? ?????", \    filetypes =(('jpg ??', '*.jpg'), ('?? ??', '*.*')), \    initialdir='D:/jh/??/????/??? ??? ??? ????/image')    # file list that user can selectfor 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 framelist_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 <-(a0+a1), a1<-(a2), a2<-(a3, a4, a5) , a3<-(a6) [1700, 2400, 900, 1600]我想獲取條目值并保存 list_file 的每個圖像。例如輸入值為desk,文件名應為desk 001.jpg、desk 002.jpg、desk 003.jpg、desk 004.jpg等。
查看完整描述

1 回答

?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

您可以使用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)


查看完整回答
反對 回復 2023-03-22
  • 1 回答
  • 0 關注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號