est-il possible de redimensionner une image à l'aide de Tkinter uniquement? Si oui, comment cela peut-il être fait? P>
5 Réponses :
Autant que je sache (et cela fait longtemps que j'ai touché Tkinter), c'est une boîte à outils d'interface graphique. Le plus proche de "images" est la classe photoimage code> qui vous permet de les charger et de les utiliser dans vos gis. Si vous souhaitez modifier / modifier une image, je pense que vous seriez mieux d'utiliser le Bibliothèque d'imagerie Python (PIL) . P>
Pil ne prend en charge que Python 2.x
Pas correct, Pil fonctionne avec une version Python, oreiller.readthedocs.io/ EN / STABLE / ...
from PIL import Image img = Image.open("flower.png") img = img.resize((34, 26), Image.ANTIALIAS) For further information, go to http://effbot.org/imagingbook/image.htm
Juste au cas où n'importe qui appartient à cela pour une référence future, alors que je la cherchais moi-même plus tôt. Vous pouvez utiliser le photoImage de Tkinter => Méthode de sous-échantillon
Je ne dirais pas que cela redimensionne vraiment dans un certain sens, mais si vous recherchez la documentation, il renvoie la même image, mais saute la quantité de pixels x spécifiée dans la méthode. P>
IE: P>
import tkinter as tk root = tk.Tk() canvas = tk.Canvas(root, ....) canvas_image = tk.PhotoImage(file = path to some image) #Resizing canvas_image = canvas_image.subsample(2, 2) #See below for more: #Shrinks the image by a factor of 2 effectively canvas.create_image(0, 0, image = canvas_image, anchor = "nw") self.canvas_image = canvas_image #or however you want to store a refernece so it's not collected as garbage in memory
Vous pouvez redimensionner un photoimage à l'aide du Cependant, ces deux méthodes ne peuvent prendre que des valeurs entières en tant qu'arguments, de sorte que les fonctionnalités sont limitées. P> Il est possible d'évoluer par des valeurs décimales, mais il est lent et perd la qualité. Le code ci-dessous illustre la mise à l'échelle par 1.5X: p> zoom code> et
sous échantillon code> méthodes. Les deux méthodes renvoient un nouvel objet photoimage fort>.
Voici un moyen de redimensionner des images (photoimages) en utilisant juste tkinter. strong> Voici une fonction simple qui pourrait répondre à vos besoins. Il s'agit d'une fonction rudimentaire qui lit le pixel d'image par pixel simplement à l'échelle d'une image à une autre. Cela peut être lent, mais en fonction de vos besoins, cela peut bien vous convient. (Dans ce contexte / discussion lorsque je me réfère à une image, je parle d'une photoimage ou d'une instance de photoimage.) Fondamentalement, il faut trois arguments: p> Il renvoie une nouvelle instance d'un photoimage.
Si vous le souhaitez, vous pouvez faire référence à votre image d'origine à l'image renvoyée de redimensionner efficacement votre image. Ou vous pouvez simplement récupérer une nouvelle image.
Voici la fonction forte> et quelques exemples: p> Cette fonction doit redimensionner une image, pixel par pixel et renvoyer une nouvelle image. P> Fondamentalement en un mot, Vous créez une image de la taille souhaitée et devez le remplir en pixel par pixel strong> avec les couleurs souhaitées à l'aide des données de l'image d'origine. Vous pouvez penser à ce processus peut-être à l'aide d'une ligne (Y = MX + B où b = 0) ou un rapport ou un facteur d'échelle ou si vous voulez y penser. En bout de ligne, vous devez remplir les nouvelles données de pixels en récupérant les données de l'image d'origine. P> Pour changer la taille de votre image, vous pouvez faire quelque chose comme ça. Voici exemple de code: p> et voici l'image 200x200, rétrécie à 100x100 et développée à 300x300 avec ce code: P>
from tkinter import *
# put resize function here
root = Tk()
myCanvas = Canvas(root, width=400, height=100)
myCanvas.pack()
puppyImage = PhotoImage(file="bassethound.png") # a 200px x 200px image
puppyImage = resizeImage(puppyImage, 273, 88) # resized to 273px x 88px
myCanvas.create_image(0, 0, anchor=NW, image=puppyImage)
root.mainloop()
Les deux réponses ci-dessous équivaut à no.
@Terryjanreedy: Pas exactement. Utilisation de Tkinter Vous pouvez redimensionner une image par des facteurs de 2. Vous ne pouvez tout simplement pas redimensionner une image à des tailles arbitraires.
@Bryan Oakley peut-on enregistrer une image redimensionnée dans la mémoire dans un fichier? La question est ambiguë quant à savoir si "image" désigne un fichier tampon de fichier ou de mémoire et quel est le résultat souhaité.
@TerryJanreedy: Oui, le
photoimage code> a une méthode
écrire code>.