在 python 中的 tkinter window 中将图像调整为标签时图像模糊
Got blurred image on resizing image as label in tkinter window in python
我尝试在 tkinter 上放置图像标签 window,我添加了放大和缩小图像的功能并在主 tkinter 上移动图像 window
但是当我点击增长按钮时,它增加了尺寸但变模糊了,对于收缩按钮反之亦然
这是我的代码,告诉我哪里错了?
from tkinter import*
from PIL import Image,ImageTk
from tkinter import Tk, Label, Button
from tkinter.filedialog import askopenfilename
import tkinter as tk
root = Tk()
root.title("image edit")
root.geometry('1000x600+500+100')
root.resizable(False,False)
#take image file from the system
Tk().withdraw()
filepath = askopenfilename()
img = Image.open(filepath)
tk_im = ImageTk.PhotoImage(img)
xi=100
yi=100
wi=100
hi=100
#function to increase size of label
def grow():
global img
global my_label
global xi
global yi
global wi
global hi
i=0
while i<2:
img = img.resize((xi, yi))
tk_im=ImageTk.PhotoImage(img)
my_label.configure(width=wi,
height=hi,image=tk_im)
my_label.image=tk_im
xi+=1
yi+=1
i+=1
wi+=1
hi+=1
#function to decrease size of image
def shrink():
global my_label
global img
global xi
global yi
global wi
global hi
i=0
while i<2:
img = img.resize((xi, yi))
tk_im=ImageTk.PhotoImage(img)
my_label.configure(width=wi,
height=hi,image=tk_im)
my_label.image=tk_im
xi-=1
yi-=1
i+=1
wi-=1
hi-=1
set image in label
my_label=Label(root,image=tk_im)
my_label.image=tk_im
my_label.pack()
buttons to resize image
grow_button=Button(root,text=
"grow",command=grow)
grow_button.pack()
shrink_button=Button(root,text=
"shrink",command=shrink)
shrink_button.pack()
root.mainloop()
您的代码不完全是 'wrong',因为人们对质量的期望水平不同。如果您想自己设置质量,但是我建议您使用最近邻重采样调整大小,这样您就不会引入任何新的模糊颜色 - 只是图像中已经存在的颜色:
import numpy as np
from PIL import Image
im = Image.open("ImageTK").convert('RGB')
im = im.resize((200,200),resample=Image.NEAREST)
im.save("result.png")
您可以使用以下方法从 Pillow 图像转换为 numpy 数组:
numpy_array = np.array(pillowImage)
并从 numpy
数组到枕头图像:
pillow_image = Image.fromarray(numpyArray)
您也可以使用 PIL。Image/openCV 和 PIL.ImageFilter 模块:
from PIL import Image, ImageFilter
import cv2
image = cv2.resize(image, fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
image = Image.fromarray(image)
这里,fx
和fy
是你要自己设置的值。
您不应修改原始图像,因为它的质量可能会发生变化,尤其是在缩小后。将调整后的图片保存到另一张图片中,如下所示:
resized_img = img.resize((xi, yi)) # don't modify the original image
tk_im = ImageTk.PhotoImage(resized_img)
我尝试在 tkinter 上放置图像标签 window,我添加了放大和缩小图像的功能并在主 tkinter 上移动图像 window
但是当我点击增长按钮时,它增加了尺寸但变模糊了,对于收缩按钮反之亦然
这是我的代码,告诉我哪里错了?
from tkinter import*
from PIL import Image,ImageTk
from tkinter import Tk, Label, Button
from tkinter.filedialog import askopenfilename
import tkinter as tk
root = Tk()
root.title("image edit")
root.geometry('1000x600+500+100')
root.resizable(False,False)
#take image file from the system
Tk().withdraw()
filepath = askopenfilename()
img = Image.open(filepath)
tk_im = ImageTk.PhotoImage(img)
xi=100
yi=100
wi=100
hi=100
#function to increase size of label
def grow():
global img
global my_label
global xi
global yi
global wi
global hi
i=0
while i<2:
img = img.resize((xi, yi))
tk_im=ImageTk.PhotoImage(img)
my_label.configure(width=wi,
height=hi,image=tk_im)
my_label.image=tk_im
xi+=1
yi+=1
i+=1
wi+=1
hi+=1
#function to decrease size of image
def shrink():
global my_label
global img
global xi
global yi
global wi
global hi
i=0
while i<2:
img = img.resize((xi, yi))
tk_im=ImageTk.PhotoImage(img)
my_label.configure(width=wi,
height=hi,image=tk_im)
my_label.image=tk_im
xi-=1
yi-=1
i+=1
wi-=1
hi-=1
set image in label
my_label=Label(root,image=tk_im)
my_label.image=tk_im
my_label.pack()
buttons to resize image
grow_button=Button(root,text=
"grow",command=grow)
grow_button.pack()
shrink_button=Button(root,text=
"shrink",command=shrink)
shrink_button.pack()
root.mainloop()
您的代码不完全是 'wrong',因为人们对质量的期望水平不同。如果您想自己设置质量,但是我建议您使用最近邻重采样调整大小,这样您就不会引入任何新的模糊颜色 - 只是图像中已经存在的颜色:
import numpy as np
from PIL import Image
im = Image.open("ImageTK").convert('RGB')
im = im.resize((200,200),resample=Image.NEAREST)
im.save("result.png")
您可以使用以下方法从 Pillow 图像转换为 numpy 数组:
numpy_array = np.array(pillowImage)
并从 numpy
数组到枕头图像:
pillow_image = Image.fromarray(numpyArray)
您也可以使用 PIL。Image/openCV 和 PIL.ImageFilter 模块:
from PIL import Image, ImageFilter
import cv2
image = cv2.resize(image, fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
image = Image.fromarray(image)
这里,fx
和fy
是你要自己设置的值。
您不应修改原始图像,因为它的质量可能会发生变化,尤其是在缩小后。将调整后的图片保存到另一张图片中,如下所示:
resized_img = img.resize((xi, yi)) # don't modify the original image
tk_im = ImageTk.PhotoImage(resized_img)