Projet : Primitive Image Format (PIF)
Description générale
Ce projet consiste à implémenter un nouveau format d’image compressé sans perte, appelé PIF (Primitive Image Format), inspiré du format JFIF.
Il s'appuie sur la création de tables de fréquences, de codes de Huffman, de codes canoniques et sur la manipulation binaire afin de réduire la taille des images.
Deux programmes Java doivent être développés :
-
Visualisateur PIF
Programme capable d’ouvrir un fichier.pifet d’afficher l’image dans une interface graphique. -
Convertisseur vers PIF
Programme permettant de charger une image classique (ImageIO), de générer ses tables de fréquences et codes associés, puis de produire un fichier.pif.
Ce travail doit être réalisé en binôme ou trinôme.
Deadline
Date limite de rendu : dimanche 11 janvier 2025 à 23h59.
Fonctionnalités attendues
1. Visualisateur .pif
- Lecture du fichier
.pifvia argument de ligne de commande ouJFileChooser. - Décodage :
- de l’en-tête (largeur, hauteur),
- des trois tables canoniques (R, G, B),
- des données binaires des pixels.
- Affichage graphique sous Swing :
- fenêtre redimensionnable,
- image centrée si petite,
- image déplaçable à la souris si trop grande.
2. Convertisseur vers format .pif
- Chargement d'une image via
ImageIO.read(). - Extraction :
- des tables de fréquences,
- des codes Huffman initiaux,
- des codes canoniques triés.
- Affichage des tables pour inspection.
- Génération du fichier
.pif:- en-tête,
- tables canoniques compactes,
- données binaires des pixels encodés.
- Le deuxième argument de ligne de commande peut définir le nom du fichier
.pif.
Structure du format PIF
Un fichier .pif contient trois sections :
-
En-tête (4 octets)
- largeur (2 octets)
- hauteur (2 octets)
-
Tables canoniques (768 octets)
Trois tables successives de 256 octets : rouge, vert, bleu.
Chaque octet indique la longueur du code canonique d’une valeur entre 0 et 255. -
Section pixels (à partir du 773e octet)
Les trois composantes (R, G, B) sont encodées via leurs codes canoniques respectifs.
Les bits sont packés de manière contiguë.
Rapport à produire
Un rapport PDF doit contenir :
- noms des membres du groupe,
- introduction résumant le sujet,
- description des fonctionnalités du programme,
- captures d’écran,
- diagrammes UML simplifiés,
- explication du compresseur (Huffman, canoniques, structure du fichier),
- explication du décompresseur,
- conclusion personnelle de chaque membre.
Le rapport ne doit pas contenir de code source.
Compilation et exécution
Visualisateur
java -jar pif-viewer.jar chemin/image.pif
Convertisseur
java -jar pif-converter.jar image.png sortie.pif
Si aucun argument n’est fourni, un JFileChooser est ouvert.
- Les commits, leur fréquence et la collaboration seront pris en compte dans la note.
Auteurs
- Algassimou Pellel DIALLO
- Ayoub ANHDIRE
- Youness BOULALAME
Enseignant
- Luc HERNANDEZ