Я работаю над проектом (tkinter-python), похожим на страницу профиля Instagram, и предоставил пользователю функцию выбора своего изображения, которое необходимо загрузить в окно, но мне нужен размер изображения, которое будет загружаемый файл должен быть меньше определенного размера. Что я должен сделать, чтобы предоставить пользователю возможность изменить размер своего изображения перед загрузкой?

from tkinter import *
from PIL import Image,ImageTk
import tkinter.messagebox as tmsg
#Profile Photo
image=Image.open(f"{name}.jpg")
width,height=image.size
area=width*height
if area<=160012:
  photo=ImageTk.Photoimage(image)
  Label(image=photo).place(X=1000,y=2)
else:
  tmsg.showinfo('Crop image','WIDTH X HEIGHT must be smaller than 160012')
-1
Arbaaz Ahmed 14 Апр 2020 в 10:01
Окно графического интерфейса tkinter, а не окно tkinter fyi😅
 – 
Arbaaz Ahmed
14 Апр 2020 в 10:02
Почему бы вам не изменить размер изображения для пользователя?
 – 
acw1668
14 Апр 2020 в 10:07
Как это сделать
 – 
Arbaaz Ahmed
15 Апр 2020 в 11:07
Как и в вашем коде, проверьте, не больше ли площадь разрешенной области, если да, измените размер изображения, чтобы его площадь была меньше разрешенной области. Затем назначьте изображение метке.
 – 
acw1668
15 Апр 2020 в 11:12

1 ответ

Вы можете изменить размер изображения для пользователя:

from tkinter import *
from PIL import Image,ImageTk

MAX_AREA = 160012

#Profile Photo
name = 'path/to/user/profile/image'
image = Image.open(f"{name}.jpg")
width, height = image.size
area = width * height

if area > MAX_AREA:
    # determine the resize ratio
    ratio = (MAX_AREA / area) ** 0.5
    # calculate the resized width and height
    new_w = int(width * ratio)
    new_h = int(height * ratio)
    # resize the image
    image = image.resize((new_w, new_h))
    print(f'Image is resized from {width}x{height} ({area}) to {new_w}x{new_h} ({new_w*new_h})')

root = Tk()
root.geometry('1000x600')
photo = ImageTk.PhotoImage(image)
Label(image=photo).place(x=1000, y=0, anchor='ne')
root.mainloop()
0
acw1668 15 Апр 2020 в 13:07