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

PyQt Python Discussion :

Afficher une image issue d'un fichier archive .CBZ


Sujet :

PyQt Python

  1. #1
    Membre à l'essai
    Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 20
    Points : 15
    Points
    15
    Par défaut Afficher une image issue d'un fichier archive .CBZ
    Bonjour,

    J'essaie de charger la 1ère image d'un fichier CBZ (Comic book Archive) dans un QPixmap mais je n'y arrive pas.
    Pourtant j'ai 40 images dans mon cbz. et si j'exécute un print(images[0]), j'obtiens bien le nom de ma 1ère image.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    self.pixmap = QPixmap(images[0])
    self.resize(self.pixmap.width(),self.pixmap.height())
    self.label.setPixmap(self.pixmap)
    par contre, si je charge une image fixe, ça fonctionne très bien (ex: self.pixmap = QPixmap("c:/test/pic.jpeg") )

    Pourriez-vous me dire comment je dois procéder svp ?

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Un fichier ".cbz" est une archive "zip". On peut faire l'extraction de ses fichiers avec le module "zipfile".

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import zipfile
     
    with zipfile.ZipFile("adresse/de/mon/fichier.cbz", 'r') as myzip:
        fichiers = myzip.namelist() # liste des fichiers du zip
        for fichier in fichiers:
            myzip.extract(fichier)
    Voir la doc: https://docs.python.org/fr/3/library...module-zipfile
    - On peut tout extraire d'un coup avec myzip.extractall(...) (attention: ça peut être dangereux pour des archives d'origine inconnue)
    - On peut n'extraire qu'un seul fichier avec myzip.extract(fichier). Exemple pour le 1er fichier de la liste: myzip.extract(fichiers[0])

    [edit] Au lieu de faire une extraction comme ci-dessus qui crée un nouveau fichier sur le disque, on devrait pouvoir lire le fichier voulu du zip-cbz avec la méthode open, ce qui donnerait une chaine de bytes, et utiliser celle-ci pour la placer dans un QPixmap avec sa méthode .loadFromData(). Il y a dans la doc un exemple pour la méthode open:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with ZipFile('spam.zip') as myzip:
        with myzip.open('eggs.txt') as myfile:
            print(myfile.read())
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Ta liste d'images contient bien les chemins complets des fichiers ?
    Quel est le format des fichiers ?

  4. #4
    Membre à l'essai
    Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Merci bcp à vous pour vos réponses.

    Je n'avais pas partagé ma function, mais j'avais en effet préalablement dézippé le GPZ via ce code trouvé sur internet.
    Ce qui me renvoyait une liste d'images. C'est cette liste que j'essaie d'exploiter (images[0]).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def read_book(self):
            if self.book_extension[1] == '.cbz':
                self.book = zipfile.ZipFile(
                    self.filename, mode='r', allowZip64=True)
                self.image_list = [
                    i.filename for i in self.book.infolist()
                    if not i.is_dir() and is_image(i.filename)]
     
            self.image_list.sort()
            return self.image_list
    Je pensais qu'il était possible de lire une image sans extraire les images sur le disque.
    Du coup, tyrtamos, je vais tenter ta méthode pour essayer de lire le flux de bytes pour éviter d'écrire le fichier sur le disque.

    Pour te répondre VinsS, non, ma liste d'image contient juste le nom du fichier. Mais comme je ne copie pas le fichier sur le disque, je pensais que le chemin complet n'était pas nécessaire.

  5. #5
    Membre à l'essai
    Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Je viens de tester ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.pixmap.loadFromData(myfile.read())
    et ça fonctionne en effet :-)

    Merci bcp

  6. #6
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Citation Envoyé par cedico Voir le message
    Pour te répondre VinsS, non, ma liste d'image contient juste le nom du fichier. Mais comme je ne copie pas le fichier sur le disque, je pensais que le chemin complet n'était pas nécessaire.
    C'était ce que je pensais, si les images ne sont pas dans le même dossier que ton script QPixmap n'ira pas les chercher ailleurs.

    Mais transférer le flux est une bonne idée.

  7. #7
    Membre à l'essai
    Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    En tout cas, merci à vous 2, ça m'a bien débloqué

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

Discussions similaires

  1. Afficher une image issue d'un BLOB
    Par amirou1939 dans le forum JSF
    Réponses: 0
    Dernier message: 18/04/2013, 12h05
  2. afficher une image jpeg sur un fichier text
    Par Sarah! dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2008, 18h00
  3. [gtkmm] Afficher une image issue de cairomm
    Par camumu dans le forum GTK+
    Réponses: 11
    Dernier message: 07/06/2007, 10h12
  4. [Zip] Afficher une image contenue dans un fichier zip
    Par Mister Nono dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 19/03/2007, 08h59
  5. Afficher une image issue d'une requête SQL
    Par aygitci dans le forum Langage
    Réponses: 1
    Dernier message: 14/03/2007, 09h12

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