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

Calcul scientifique Python Discussion :

Duplication d'une image et redimensionnement (PIL)


Sujet :

Calcul scientifique Python

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2012
    Messages : 7
    Par défaut Duplication d'une image et redimensionnement (PIL)
    Bonjour, je réalise un programme de traitement d'image, et j'ai un petit problème au niveau d'une fonction qui duplique l'image 4 fois pour lui donner un effet photomaton. Pour ce programme, j'utilise une interface graphique et je souhaite afficher par dessus mon image d'origine l'image photomaton. Je dois donc la redimensionner comme la première. Aucun problème pour l'instant, je crée une nouvelle image 2 fois plus grande que celle d'origine, j'y duplique mon image d'origine et je redimensionne l'image photomaton. C'est ici que ça bloque, je souhaite remplacer les pixels de l'image d'origine par ceux de la nouvelle image, mais sans aucuns messages d'erreur ni rien, mon image d'origine reste la même image. Je ne comprends vraiment pas d'où vient le problème, voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    from PIL import Image
     
    im=Image.open("phare.jpg")
    pix=im.load()
    larg,haut=im.size
     
    def photomatonner():
        global new_photo
        if (mode=="L"):
            new_photo=Image.new('L',(2*larg,2*haut))
            pix2=new_photo.load()
     
            for i in range(0,larg*2):
                for j in range (0, haut*2):
                    pix2[i,j]=pix[i%larg,j%haut]
     
            new_photo=new_photo.resize((larg,haut))
     
            for i in range (0,larg):
                for j in range (0,haut):
                    pix[i,j]=pix2[i,j]
     
    photomatonner()
     
    im.show()
    Ce n'est qu'une partie de mon code en simplifié, mais cela ne fonctionne quand même pas, pouvez-vous m'aider? Pourtant, si je remplace le im.show() à la fin par un new_photo.show(), l'image dupliquée apparaît dans les bonnes dimensions.

    Merci de votre aide !

  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
    Salut,

    J'ai l'impression que tu te compliques un peu la vie, il n'y a aucune raison de copier pixel par pixel, ce qui prend beaucoup de temps et surtout si tu doubles les dimensions de l'image originale.

    Et puis pourquoi doubler les dimensions, ces transformations ne se font pas sans perte de qualité.

    Regarde si ceci correspond à ce que tu veux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    orig = Image.open('...')
    lrg, lng = orig.size[0] / 2.0, orig.size[1] / 2.0
    copy = orig.resize((lrg, lng))
    for x, y in ((0, 0), (lrg, 0), (0, lng), (lrg, lng)):
        orig.paste(copy, (x, y, x+lrg, y+lng))
    Pas testé


    Edit: J'ai tout de même eu envie de tester, il faut convertir lrg et lng en int() sinon PIL se plaint, et ça produit exactement ce qui est attendu.

    Et rapide: 0.79 sec. pour une image de 98 Mo.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Enregistrer une image après redimensionnement image
    Par legrandse dans le forum jQuery
    Réponses: 1
    Dernier message: 13/08/2014, 11h42
  2. [PIL] redimensionner une image avec resize
    Par nicolivier dans le forum Général Python
    Réponses: 12
    Dernier message: 06/04/2013, 17h20
  3. [VB.NET] Redimensionner une image dans un PictureBox
    Par Monster77 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 05/04/2007, 18h24
  4. [VB.NET] Redimensionner une image proportionnelement
    Par Monster77 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/10/2004, 12h10
  5. [MX2004] redimensionner une image lors du chargement
    Par ouinouin dans le forum Flash
    Réponses: 8
    Dernier message: 18/02/2004, 18h32

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