Annonce

Réduire
Aucune annonce.

Accès aux "pixels fictifs" d'un fichier .jpg avec pillow

Réduire
X
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Accès aux "pixels fictifs" d'un fichier .jpg avec pillow

    Bonjour,

    Si j'ai bien compris, quand les dimensions (L et H en pixels) d'une image ne sont pas des multiples de 8, des "pixels fictifs" sont ajoutés à droite et/ou en bas avant la compression au format jpg.

    Je souhaite accéder à ces "pixels fictifs" une fois le fichier créé, pour éventuellement en changer les valeurs (stéganographie).

    J'essaye de la faire sous python avec pillow : malheureusement, je n'y arrive pas.

    Après avoir transformé l'image en tableau numpy [ imgpil = Image.open("monimage.jpg") img = np.asarray(imgpil) ], il apparaît que ce tableau n'intègre pas les pixels fictifs, il a la dimension de l'image proprement dite (dans mon cas 500x778) : IndexError: index 778 is out of bounds for axis 0 with size 778 .

    Connaissez-vous une autre solution?

    Merci d'avance.

  • #2
    Salut et bienvenue,

    En effet, il paraît inévitable de rajouter des pixels assez tôt dans le processus de compression pour être au moins divisible par 8x8 pixels. Certaines implémentations demandent des blocs de 16x16 pixels.

    La mauvaise nouvelle, c'est que lorsque tu utilises des bibliothèques permettant la décompression JPEG, ces pixels sont retirés automatiquement des données accessibles (logique, non ?). Sans savoir exactement sous quelle forme tu récupères tes pixels avec np.asarray(), c'est déjà tronqué à ce stade. Il te faudrait donc accéder aux données avant que le code de la bibliothèque ne s'en occupe. Ce qui voudrait dire... Écrire ton propre code de décompression JPEG ou, du moins, en copier un et enlever cette troncature. Il te faut agir à un plus bas niveau que ce que tu pensais.

    Le problème se poursuit quelque peu avec la compression, une fois que tu as ajouté tes données, car il faut déclarer la taille de l'image à ce qu'elle était initialement, sinon ces pixels additionnels vont apparaître à l'écran lors d'une décompression. Cela est heureusement plus simple : tu compresses avec une bibliothèque quelconque mais après il te faudra modifier la taille de l'image dans le fichier. Nous sommes donc à un niveau de manipulation des octets contenus dans le fichier JPEG.

    Tout cela demande une étude plus profonde du format JPEG si tu veux parvenir à tes fins.

    Bon courage.

    Commentaire


    • #3
      Envoyé par Icarus Voir le message
      Il te faudrait donc accéder aux données avant que le code de la bibliothèque ne s'en occupe. Ce qui voudrait dire... Écrire ton propre code de décompression JPEG ou, du moins, en copier un et enlever cette troncature. Il te faut agir à un plus bas niveau que ce que tu pensais.

      .
      Bonjour et merci pour la précision de la réponse.

      Avant de me lancer dans cette "mission impossible", je vais continuer à chercher sur le web : il y a certainement quelqu'un qui a déjà résolu cette question.

      Commentaire


      • #4
        Cela n'a rien d'impossible, c'est juste que ça demande du travail.

        Sur le web, il est facile de trouver de la stéganographie / JPEG. Cela va du bête ajout de chaînes de caractères dans le fichier (hors données image) jusqu'à la subtile altération de l'image avec insertion de données quasiment sans conséquence visuelle. Cela dit, je n'ai rien vu concernant ces pixels fantômes.

        Commentaire

        Chargement...
        X