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

Python Discussion :

PIL et 8bits/32bits sur format png


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de memento80
    Homme Profil pro
    Boulot : ne rentre pas dans une case
    Inscrit en
    Novembre 2004
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Boulot : ne rentre pas dans une case
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2004
    Messages : 163
    Par défaut PIL et 8bits/32bits sur format png
    Bonjour tout le monde,

    J'ai un problème faisant suite à une précédente discussion que j'avais ouverte :
    http://www.developpez.net/forums/d12...ux-images-png/

    Je voulais comparer 2 images en png et noter les différences. Bien, je ne reviens pas là-dessus car ça fonctionne très bien... à un détail près.

    Les images que je dois comparer sont uploadées via un site web par les utilisateurs.
    Le problème vient que, ne connaissant pas, je n'ai pas pris en compte qu'il existait différents "formats" .png réagissant différemment.
    En effet, je m'étais basé sur des images "32bits" alors que certains utilisateurs m'envoient des images "8bits" et le programme de comparaison (du précédent lien) plante car la commande suivante ne donne pas le même résultat en fonction de l'image "8bits" ou "32bits".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    couleurImgValid = imgValid.getpixel(position) # Prendre la couleur sur le pixel de l'image
    En "8bits", j'obtiens un integer. En "32bits", j'obtiens bien la liste [r,g,b,a] correspondant aux 3 couleurs + la transparence. Et bien entendu, je ne peux comparer les 2.

    J'ai bien essayer de convertir (Method "convert") mais il ne veut pas convertir un mode "P" en "RGBA" (voir mode : http://www.pythonware.com/library/pi...k/concepts.htm) ou d'ré-enregistrer l'image "8bits" de l'utilisateur en "32bits" avant d'essayer de la faire comparer mais elle reste désespérément en 8bits et inexploitable.

    code essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imgATester.save(img, "png", bits=32) # Sauvegarde de l'image
    Si vous avez quelques pistes, je vous en serai reconnaissant.
    Merci.

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    Avez-vous essayé cette option avec PIL?

  3. #3
    Membre confirmé Avatar de memento80
    Homme Profil pro
    Boulot : ne rentre pas dans une case
    Inscrit en
    Novembre 2004
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Boulot : ne rentre pas dans une case
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2004
    Messages : 163
    Par défaut
    Bonsoir,

    Non, je ne connaissais pas. Merci, c'est intéressant.

    Néanmoins, de ce que je comprends (à cette heure, je ne comprends peut-être plus très bien), c'est pour comparer deux images et voir si elles sont identiques ou non. Moi, j'avais besoin vraiment de ressortir les pixels qui étaient différent dans des zones bien précises de l'image.
    En gros, un utilisateur avait le droit d'avoir une image différente mais que sur certaines zones de l'image seulement (pour effectuer le coloriage d'une zone par exemple). Et de sortir en erreur si des pixels "interdits" avaient été modifiés (voir mon précédent post).

    Je vois que ImageChops permet aussi pas mal de trucs que je ne connaissais pas. Encore des possibilités supplémentaires peut-être. Pffiouuuuu ! J'ai l'impression d'être en quête du Graal dans toutes ces fonctions, methods and co.. toutes plus ou moins connues. Même si c'est intéressant, je m'y perds dans tout ça.

    D'où mon appel à l'aide d'ailleurs..

  4. #4
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Bonjour

    est-ce que dans l'image de référence, celle que "colorient" les utilisateurs avant d'uploader le résultat, il existe des pixels autres que :
    • des pixels transparents (a == 0 et r, g et b quelconques)
    • des pixels avec r == g == b ?


    Est-ce que, comme dans l'exemple de l'ancienne discussion, la composante a vaut soit 0 soit 255 ?

  5. #5
    Membre confirmé Avatar de memento80
    Homme Profil pro
    Boulot : ne rentre pas dans une case
    Inscrit en
    Novembre 2004
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Boulot : ne rentre pas dans une case
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2004
    Messages : 163
    Par défaut
    Hola,

    Voici en PJ l'image de référence.

    Les utilisateurs doivent colorier les pixels blancs et ne pas toucher, ni aux pixels déjà colorés, ni aux pixels transparents.

    Ce sujet avait été brillamment résolu lors de mon précédent sujet.

    Depuis, j'ai été confronté à 2 problèmes :
    Le premier, c'est qu'en fonction du logiciel de retouche d'image, certains gardent bien les pixels transparents, d'autres (comme le bête Paint) trompent l'utilisateur en remplaçant à l'enregistrement les pixels transparents par des pixels blancs.
    Du coup, j'ai modifié mon programme pour que lorsque je vérifie la transparence du pixel, s'il est transparent, super ! je fais rien... mais s'il est blanc, alors je le remets transparent.
    Problème résolu.

    Mon deuxième soucis plus récent, est donc qu'un utilisateur peut enregistrer, toujours sans le savoir, en 8bits... et visiblement, l'image perd sa notion de rgba et mon programme du sujet précédent ne fonctionne plus pour la raison cité au début :
    En "8bits", j'obtiens un integer. En "32bits", j'obtiens bien la liste [r,g,b,a] correspondant aux 3 couleurs + la transparence. Et bien entendu, je ne peux comparer les 2.
    D'où mon idée de convertir l'image 8bits avant de la traiter ou de la ré-enregistrer en 32bits (un logiciel de retouche d'image sait bien le faire.. alors pourquoi pas en Python, non ?).
    Ou une autre idée peut-être ? Peut-être détecter si c'est du 8 ou 32 bits et traiter l'image différemment ? Mais c'est un peu lourd, surtout si on prend en compte encore d'autres format et un traitement différent pour chaque format..
    Images attachées Images attachées  

  6. #6
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Citation Envoyé par memento80
    J'ai bien essayer de convertir (Method "convert") mais il ne veut pas convertir un mode "P" en "RGBA"
    Et pour cause : ça reviendrait à passer d'un niveau de gris (mode P) à une couleur (triple RGB). Déjà qu'il n'y a pas de consensus pour passer d'un triplet RGB à un niveau de gris, alors le chemin inverse... Et quand bien même : n'oublie pas que P c'est 256 valeurs alors quee RGB c'est 256*256*256 (plus de 16 millions de valeurs) : à partir d'un niveau de gris, tu ne peux pas remonter au triplet (r,g,b) initial et plusieurs triplets (r,g,b) donnent le même niveau de gris. Quelle que soit la loi de transformation choisie.

    Bref, si tu proposes une image de référence en couleur + transparence (rgba) et qu'on te fournit une image noir et blanc, tu ne peux pas comparer les pixels "non libres" (à ne pas colorier). Tu peux, au mieux, en te basant sur TON image référence, aller chercher (fonction de la position dans l'image) les pixels "coloriés" dans l'image qu'on te livre et modifier ton image référence.

    Ou proposer une image référence en noir et blanc. Mais rien n'empêchera un utilisateur d'utiliser l'image référence couleur et te renvoyer une image noir et blanc.

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

Discussions similaires

  1. Image format png
    Par JlouisI dans le forum Delphi
    Réponses: 8
    Dernier message: 28/06/2006, 19h12
  2. algorithme de compression des data en format PNG
    Par vbany dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 07/04/2006, 14h08
  3. Problème sur format
    Par G.D.O dans le forum ASP
    Réponses: 1
    Dernier message: 02/12/2005, 14h49
  4. Recherche de documentation sur format jpg
    Par LinkII dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 16/07/2005, 10h47
  5. Utilisation d'images au format png
    Par chtiot dans le forum Langage
    Réponses: 2
    Dernier message: 24/10/2003, 15h56

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