8
votes

Comment redimensionner une image en utilisant tkinter?

est-il possible de redimensionner une image à l'aide de Tkinter uniquement? Si oui, comment cela peut-il être fait?


4 commentaires

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 a une méthode écrire .


5 Réponses :


1
votes

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 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) .


2 commentaires

Pil ne prend en charge que Python 2.x


Pas correct, Pil fonctionne avec une version Python, oreiller.readthedocs.io/ EN / STABLE / ...



7
votes
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

0 commentaires

3
votes

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


0 commentaires

10
votes

Vous pouvez redimensionner un photoimage à l'aide du zoom et sous échantillon méthodes. Les deux méthodes renvoient un nouvel objet photoimage . XXX

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.

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: xxx


0 commentaires

0
votes

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>

  • Votre image (une instance d'un photoimage) li>
  • votre largeur désirée en pixels li>
  • la hauteur désirée en pixels li> ul>

    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> xxx pré>

    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> xxx pré>

    et voici le résultat: Entrez la description de l'image ici 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()
    
    


0 commentaires