IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Agrandir/Rétrécir une image


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 28
    Par défaut Agrandir/Rétrécir une image
    Bonjour à tous,

    J'utilise Python en version 3.3, et suis donc obligé d'utiliser la classe PhotoImage pour traiter mes images (PIL n'étant pas encore sortit pour les versions 3.x de Python).

    J'aimerai rétrécir/agrandir une image que j'affiche dans un Canvas pour que sa taille corresponde à la taille du Canvas. Ainsi à l'ouverture elle le remplirait, et lors de l'agrandissement/rétrécissement de la fenêtre, l'image remplirait automatiquement les nouvelles dimensions du Canvas.

    J'ai donc trouvé deux méthodes zoom, et subsample, cependant elles ne prennent pas en paramètres de float (uniquement des entiers). Je suis donc coincé.

    Auriez vous une solution ?

    Toute aide est la bienvenue.

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Et qu'est-ce qui te gêne de convertir tes float en int ?

    Autant le savoir: il n'y a pas de demi-pixel.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 28
    Par défaut
    La valeur en float correspond au facteur d'agrandissement/rétrécissement de l'image pour qu'elle puisse remplir le widget. Elle ne correspond pas à la valeur d'un pixel.

    Je ne veux pas zoomer sur une partie de l'image, je veux pouvoir voir toute mon image dans mon widget.

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Oui, d'accord le facteur de zoom est un float, mais cela ne change rien.

    En pseudo-code:

    nouvelle_largeur = largeur_image * facteur_zoom
    nouvelle_hauteur = hauteur_image * facteur_zoom
    image_resize(int(nouvelle_largeur), int(nouvelle_hauteur))


    La perte sera inférieure à un pixel.
    On procède de la même manière avrc d'autre frameworks graphiques.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 28
    Par défaut
    Je n'utilises pas PIL je n'ai donc pas de méthode resize sur mon objet :/.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def onResize(self):
    		old_image_w = self.photo.width()
    		old_image_h = self.photo.height()
     
    		new_image_w = self.canvas.winfo_reqwidth()
    		new_image_h = self.canvas.winfo_reqheight()
     
    		scale_w = new_image_w/old_image_w
    		scale_h = new_image_h/old_image_h
     
    		self.photo.zoom(scale_w, scale_h) #Ne fonctionne pas car ne prends pas de float en paramètres
    		self.canvas.itemconfigure(self.item_photo, image=self.photo)
    Et caster mon scale me fera perdre bien plus que 1px ....


    EDIT; suis tombé sur cet article, qui me fait un peu peur... http://effbot.org/zone/tkinter-photo...scale-ramp.htm

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Citation Envoyé par Nainpoleon Voir le message
    Je n'utilises pas PIL je n'ai donc pas de méthode resize sur mon objet :/.
    Pseudo code ça veut dire que c'est pas pour du vrai (c'est pour du beurre, quoi).

    Citation Envoyé par Nainpoleon Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		self.photo.zoom(scale_w, scale_h) #Ne fonctionne pas car ne prends pas de float en paramètres
    		self.canvas.itemconfigure(self.item_photo, image=self.photo)
    Ha, tu ne peux pas lui passer les dimensions du canevas, dans ce cas tu dois arrondir ton facteur de zoom à l'unité supérieure.

    Par contre, mon exemple, un peu simpliste est bugué puisqu'il fait usage de deux facteurs différents ce qui entraînera une distorsion de l'image. Il faudra, donc ajouter une ligne de code pour choisir celui des deux facteurs de zoom qui donnera une taille d'image la plus proche de celle du canevas.

    Le lien que tu donnes dit justement que Tk ne peux faire plus que cela en matière de redimensionement.


    Tu es sous Windows ? Il existe une compilation de PIL pour Python3
    http://www.lfd.uci.edu/~gohlke/pythonlibs/

    Pour Linux il y a Pillow, un fork de PIL
    http://blog.aclark.net/2013/01/10/pillow-python-3/

Discussions similaires

  1. Animation : Agrandir puis rétrécir une image.
    Par JohnMalko dans le forum Powerpoint
    Réponses: 1
    Dernier message: 02/07/2011, 19h48
  2. Peut-on agrandir/rétrécir une image selon un Slider ?
    Par zouuc dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 15/10/2010, 10h52
  3. Ggrandir ou rétrécir une image
    Par marco62118 dans le forum SDL
    Réponses: 3
    Dernier message: 27/03/2010, 17h11
  4. Réponses: 3
    Dernier message: 19/01/2006, 14h08
  5. [Java2D]Agrandir une image
    Par Guybrush dans le forum 2D
    Réponses: 8
    Dernier message: 02/11/2005, 10h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo