Huffman - compresseur de fichiers

Soyez le premier à donner votre avis sur cette source.

Vue 11 876 fois - Téléchargée 1 523 fois

Description

Ce code se base essenciellement sur un module de compression programmé par Fredrik Qvarfort (25/08/2000), sélectionné pour sa rapidité (j'ai pas dit qu'il y avait pas plus rapide ...) et sa simplicité (Qui a dit que rapide rimait avec compliqué ? Bon, tout est relatif ...).

J'ai repris le module sans toucher aux fondements, je l'ai un peu optimisé au niveau de la mémoire en exécution notament, et j'ai traduit tous les commentaires, sauf oublis, de l'anglais vers le français pour le plus grand plaisir de ceux/celles qui ne sont pas anglophones.

Bon, passons en aux faits :
Ce programme fait usage de l'algorytme de Huffman pour compresser des données, j'insiste sur le fait qu'il compresse, et n'archive pas (Winzip archive, Winrar archive ...). Je l'ai doté d'une interface intuitive (encore qu'imparfaite) que vous avez tout loisir d'améliorer à votre gré (Si vous en faites une merveille, vous pourrez me la donner quand même :D ???).

L'algorytme de Huffman ne donne pas des taux de compression miribolants (30% c'est bien ... Bon, dans certaines conditions particulières extrêmement rares dans la réalité, on atteint 98%, mais c'est pas référence ...). Sachez que la taux obtenu dépend essenciellement du type de données : plus elles sont répétitives, meilleur c'est. Cet algo est particulièrement efficace sur le texte (>Comme l'a précisé Jack), et j'ai constaté un bon taux sur les fichiers Excel XP. Ne vous attendez pas à des miracles, notament sur les formats déjà compressés (MPEG, GIF >Encore que ...<, MP3 ...) qui sont comme dit précédament déjà compressés :D !!!!

Je me suis déchiré pour que ce programme arbore le style visual de votre PC sous Windows XP. Le fichier .exe.manifest fourni avec doit être placé dans le même répertoire que l'exe compilé et avoir le même nom que lui pour que cela ait effet. Si le .manifest n'y est pas et que le code est inchangé, il se peut qu'il y ait des bugs (c'est rare toutefois ...)
Si vous êtes sous Windows PasXP ou que vous ne voulez pas en avoir le style (J'en connais comme ça ...), vous pouvez laisser tel qu'el ou supprimer le .exe.manifest et supprimer les lignes de codes y référant (J'ai mis des commentaires aux lignes en question).

Vous allez me demander pourquoi Diable je n'ai pas mis d'Option, mais des Checkbox ? C'est simple, je subis un bug avec mes Option : Option.Value=False quoi que je fasse, alors j'ai remplacé ...
A ce propos, ça m'a permis de tester la décompression d'un fichier non compressé : n'essayez pas, je vous le déconseille ... Dans la théorie, il y a un CheckSum pour éviter ça, mais en pratique je sais pas pourquoi, mais il marche pas toujours ... (En fait je crois voir pourquoi, mais faites gaffe tant que j'ai pas corrigé ...).

Bon, je crois que j'ai rien oublié ...
Voilà, bonne compression !!!

Source / Exemple :


Option Explicit
Public Zip as Object
Public Capture as Picture
Sub Main()
     On Error Resume Next
     Read Capture
     Read Zip
End Sub

Conclusion :


Je pense le mettre a jour quand j'aurai réussi à l'améliorer encore un peu et à supprimer la !@#*! de bug avec les CheckSums.
Si vous le modifiez, vous serez gentils de penser à me prévenir (Si vous voulez pas je m'en fous, je viendrai pas vérifier de toute façon ..., mais ça fait toujours plaisir !!!)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1114
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
6 mai 2007

Oui bonne idée, comment fait tu ? :)
Messages postés
285
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
13 février 2005

Hufmann...
Jolie la interface...

Juste un tip, parce que apparemment personne le sait ici : il y a d'autres moyens que le .exe.manifest pour avoir les styles XP...

Si ca t'interresse, tu me demande un exemple ou le fichier .RES que j'ai fais...

Sinon, joli prog...
Messages postés
78
Date d'inscription
dimanche 21 avril 2002
Statut
Membre
Dernière intervention
7 juillet 2003

Pour sûr que la compression itérative donne des résulats plus probants, mais les 25% ne sont pas fixes, ils dépendent de la taille du fichier compressé, et du type de données compressées ... J'avais pensé à mettre une option de surcompression, mais certains types de fichiers perdaient en gain ... Cela dit, maintenant que j'y pense, il serait possible de faire un essai, et de garder le fichier compressé au premier niveau si le second n'est pas plus petit ... Cela dit, un gain de 2,5 ko c'est pas non plus énorme ... Fodrait essayer à plus grande échelle ...
Messages postés
35
Date d'inscription
dimanche 20 janvier 2002
Statut
Membre
Dernière intervention
19 juillet 2004

Cet algorytme est encore plus efficace (env. 25% plus) si il est executé deux fois (En utilisant un fichier temporaire)
Exemple : un fichier de 66Ko à l'origine, en une seule compression, le fichier obtenu fesait 12,7Ko. La deuxième compression l'a réduit a 10,2Ko...
Ce code est donc rapide mais n'utilise pas le maximum des capacités de l'algo, mais en deux fois, c'est plus long, alors au choix l'efficacité ou la vitesse ?

Cependant je remercie Tidus pour ce code car il m'a bien dépanné et pour la vitesse c'est pas une blague.

!!! BRAVO !!!
10/10

Ps : C'est tout de meme pas si efficace que PowerArchiver ... mais c pas grave pour ce que je veu faire.
Messages postés
78
Date d'inscription
dimanche 21 avril 2002
Statut
Membre
Dernière intervention
7 juillet 2003

Merci pour vos commentaires ...
Comme le dit Jack et comme j'ai oublié de le préciser, il est vrai que cet algo tourne bien mieux sur du texte ... ou toute autre infoàrmation hautement répétitive.
Pour les taux de compression, azerty25, tu noteras qu'une vidéo MPEG est déjà compressée, et que comme tout format compressé, on gagne pas grand chose en le compressant. Pour ce qui est du BMP noir est blanc, en gros ce que t'as fait c'est du RLE, sauf que c'est pas exploitable sans décompresser ... Plus y a de couleurs, moins ca compresse.

Je fais mon TPE sur ce programme (Je suis en Term S et je vais pas vous expliquer tout le topo ici ...), et je ferai un site, je vous mettrai le lien pour les intéressés ... Je rentrer pas trop dans les détails de prog' (Y a ke nous que ça intéresse ...), mais surtout sur le principe de la compression (C un truc prévu pour les NERDZ quand même ... lol ... Saletés d'examinateurs qui y connaisent rien ... LOL) Cela dit ca devrait vous aider à comrpendre des choses.

Merci quand même à AGAGA pour le tut qu'il a sur son site (G pu l'URL là ...) qui m'a donné cette idée lumineuse, et aidé à comprendre le pourquoi du comment, même si son algo de construction de l'arbre est foireux au niveau de la décompression (encore que c'est peut-être le bug des ratio qui m'a eu ... mais je doute ...)

Pour ce qui est des commentaires, oui, y en a beaucoup, je sais, j'adore commenter, mais là c'est strict en anglais ... G traduit les comms je les uploade de suite ... Je suis plus funny ... mais y a des trucs que j'arrive aps à exprimer dans la langue de molière alors il se peut que certains trucs soient traduits approximativement, mais c pas grave ... C compréhensible ...
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.