使用 python、tkinter 合并条件小于 2450 像素的图像
to merge images with condition less than height 2450 pixel by using python, tkinter
我做了一个合并图片的程序,我想升级这个程序,让图片的总高度小于 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 <-(a0+a1), a1<-(a2), a2< -(a3, a4, a5), a3<-(a6)
[1700, 2400, 900, 1600]
我想获取条目值并保存 list_file 的每个图像。例如输入值为desk,文件名应为desk001.jpg、desk002.jpg、desk003.jpg、desk004.jpg等
您可以使用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)
我做了一个合并图片的程序,我想升级这个程序,让图片的总高度小于 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 <-(a0+a1), a1<-(a2), a2< -(a3, a4, a5), a3<-(a6) [1700, 2400, 900, 1600]
我想获取条目值并保存 list_file 的每个图像。例如输入值为desk,文件名应为desk001.jpg、desk002.jpg、desk003.jpg、desk004.jpg等
您可以使用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)