2005-10-31 17:48:00 +00:00
|
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
|
|
<html lang="fr-fr">
|
|
|
|
<head>
|
|
|
|
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
|
|
|
|
<link rel="stylesheet" type="text/css" href="eyd.css">
|
|
|
|
<title>EnlargeYourData</title>
|
|
|
|
<meta content="Glenn ROLLAND" name="author">
|
|
|
|
</head>
|
|
|
|
<body style="direction: ltr;">
|
|
|
|
<div style="text-align: justify;" class="page">
|
|
|
|
<h1>EnlargeYourData</h1>
|
|
|
|
<ol>
|
|
|
|
<li><a href="#1._Description">Description</a></li>
|
|
|
|
<ol>
|
|
|
|
<li><a href="#1.1._Auteurs">Auteurs</a></li>
|
|
|
|
</ol>
|
|
|
|
<li><a href="#2._Pr%E9-requis">Pré-requis</a></li>
|
|
|
|
<ol>
|
|
|
|
<li><a href="#2.1._Sur_un_syst%E8me_Debian_GNULinux">Sur un
|
|
|
|
système Debian GNU/Linux</a></li>
|
|
|
|
<li><a href="#2.2._Sur_un_syst%E8me_Apple_MacOS_X_">Sur un
|
|
|
|
système Apple MacOSX (≥10.3)</a></li>
|
|
|
|
<li><a href="#2.3._Sur_un_syst%E8me_Microsoft_Windows">Sur
|
|
|
|
un système Microsoft Windows</a></li>
|
|
|
|
</ol>
|
2005-10-31 18:14:02 +00:00
|
|
|
<li><a href="#3._Se_procurer_EnlargeYourData">Se procurer
|
2005-10-31 17:48:00 +00:00
|
|
|
EnlargeYourData</a></li>
|
2005-10-31 18:14:02 +00:00
|
|
|
<li><a href="#4._Utiliser_EnlargeYourData">Utiliser EnlargeYourData</a></li>
|
2005-10-31 17:48:00 +00:00
|
|
|
<ol>
|
|
|
|
<li><a href="#4.1._Compilation">Compilation</a></li>
|
|
|
|
<li><a href="#4.2._Utilisation">Utilisation</a></li>
|
|
|
|
</ol>
|
|
|
|
<li><a href="#5._Documentation">Documentation</a></li>
|
|
|
|
</ol>
|
|
|
|
<h2><a name="1._Description"></a>1.
|
|
|
|
<a name="Description"></a>Description</h2>
|
|
|
|
<p>EnlargeYourData est un ensemble
|
|
|
|
de logiciel libres de compression/décompression de
|
|
|
|
fichiers, basés sur l'algorithme RLE et ses variation. Il
|
|
|
|
possède les caractéristiques
|
|
|
|
suivantes :</p>
|
|
|
|
<ul>
|
|
|
|
<li>Il est distribué
|
|
|
|
sous la licence <a href="http://www.gnu.org/copyleft/gpl.html">GNU
|
|
|
|
General Public License</a></li>
|
|
|
|
<li>Il
|
|
|
|
est écrit en C++ et possède une interface
|
|
|
|
textuelle</li>
|
|
|
|
<li><span style="font-weight: bold;"></span>Il
|
|
|
|
implemente RLE (suite de motifs identiques),</li>
|
|
|
|
<li>Il
|
|
|
|
implémente la variante de RLE (on l'appellera RLE2 dans la
|
|
|
|
suite de ce document) encodant les
|
|
|
|
bits à zéros entre les bits à un.</li>
|
|
|
|
<li>Il n'implemente pas (a l'heure actuelle) RLE2 avec le codage
|
|
|
|
de Golomb.</li>
|
|
|
|
</ul>
|
|
|
|
<p>Dans la suite de ce document, on appellera "cellule" un groupe de X
|
|
|
|
bits.</p>
|
|
|
|
<h3><span style="font-weight: bold;"></span>1.1.
|
|
|
|
Auteurs</h3>
|
|
|
|
<p>EnlargeYourData a
|
|
|
|
été entièrement
|
|
|
|
réalisé par Glenn ROLLAND <<a
|
|
|
|
href="mailto:glenux@fr.st">glenux@fr.st</a>>
|
|
|
|
à l'occasion de travaux pratiques du cours de format de
|
|
|
|
documents et compression du Master 2 Ingénierie Informatique
|
|
|
|
-
|
|
|
|
Systèmes, Réseaux et Internet.</p>
|
|
|
|
<h2><a99 name="2._Pré-requis">2.
|
|
|
|
Pré-requis</a99></h2>
|
|
|
|
<p>EnlargeYourData
|
|
|
|
nécessite les bibliothèques de fonctions
|
|
|
|
suivantes (dans
|
|
|
|
leur version de développement si compilez le programme
|
|
|
|
vous-même):</p>
|
|
|
|
<ul>
|
|
|
|
<li>glib-2.0</li>
|
|
|
|
</ul>
|
|
|
|
<h3><a name="2.1._Sur_un_système_Debian_GNULinux"></a>2.1.
|
|
|
|
Sur un système
|
|
|
|
Debian GNU/Linux</h3>
|
|
|
|
<p>Il vous suffit de taper (en
|
|
|
|
tant qu'administrateur) les
|
|
|
|
commandes suivantes pour installer le nécessaire: </p>
|
|
|
|
<p class="code"># apt-get
|
|
|
|
install libglib-2.0-dev</p>
|
|
|
|
<h3><a name="2.2._Sur_un_système_Apple_MacOS_X_"></a>2.2.
|
|
|
|
Sur un système Apple MacOS X (>= 10.3)</h3>
|
|
|
|
<p>
|
|
|
|
Il est nécessaire d'avoir installé <span
|
|
|
|
style="font-style: italic;"></span>les <span
|
|
|
|
style="font-style: italic;">autotools</span>
|
|
|
|
(automake, autoconf...) dans leur dernière
|
|
|
|
version. À partir de là, il suffit de
|
|
|
|
taper les commandes suivantes dans un terminal :</p>
|
|
|
|
<p class="code"># sudo fink
|
|
|
|
install glib2-dev</p>
|
|
|
|
<h3><a name="2.3._Sur_un_système_Microsoft_Windows"></a>2.3.
|
|
|
|
Sur un système Microsoft Windows</h3>
|
|
|
|
Cela ne fut pas (encore) testé, mais il est très
|
|
|
|
probable que cela fonctionne sous Cygwin.<br>
|
2005-10-31 18:14:02 +00:00
|
|
|
<h2><a name="3._Se_procurer_EnlargeYourData"></a>3.
|
2005-10-31 17:48:00 +00:00
|
|
|
Se procurer EnlargeYourData</h2>
|
|
|
|
Vous
|
|
|
|
pouvez télécharger la dernière archive
|
|
|
|
des
|
|
|
|
sources, ou bien directement la version la plus récente du
|
|
|
|
projet sur le dépôt Subversion du projet.<br>
|
|
|
|
<h3>3.1. L'archive des sources</h3>
|
|
|
|
Elle est disponible à l'adresse : <br>
|
2005-10-31 18:14:02 +00:00
|
|
|
<a href="http://glenux2.free.fr/pub/projets/EnlargeYourData/archives/">http://glenux2.free.fr/pub/projets/EnlargeYourData/archives/</a><br>
|
2005-10-31 17:48:00 +00:00
|
|
|
<h3>3.2. Le
|
|
|
|
dépôt Subversion</h3>
|
|
|
|
<p>Afin d'obtenir les sources les
|
|
|
|
plus à jour, vous pouvez utiliser le logiciel de
|
|
|
|
contrôle de sources Subversion </p>
|
|
|
|
<p class="code">$ svn
|
|
|
|
checkout http://repository.glenux.ath.cx/svn/EnlargeYourData/</p>
|
|
|
|
<p>Il n'y a pas de mot de passe,
|
|
|
|
il suffit donc de presser la touche
|
|
|
|
"Entrée" pour l'utilisateur "anonymous", si ce dernier vous
|
|
|
|
est
|
|
|
|
demandé.</p>
|
2005-10-31 18:14:02 +00:00
|
|
|
<h2><a name="4._Utiliser_EnlargeYourData"></a>4.
|
2005-10-31 17:48:00 +00:00
|
|
|
Utiliser EnlargeYourData</h2>
|
|
|
|
<h3><a name="4.1._Compilation"></a>4.1.
|
|
|
|
Compilation</h3>
|
|
|
|
<p>Commencez par
|
|
|
|
décompressez l'archive.</p>
|
|
|
|
<p class="code">$ tar -xzvf
|
|
|
|
eyd-0.2.tar.gz</p>
|
|
|
|
<p>Rendez vous ensuite dans le
|
|
|
|
dossier qui vient d'être créé lors de
|
|
|
|
la décompression.</p>
|
|
|
|
<p class="code">$ cd
|
|
|
|
EnlargeYourData-0.2</p>
|
|
|
|
<p>Puis lancez
|
|
|
|
l'auto-configuration du logiciel, puis la compilation.</p>
|
|
|
|
<p class="code">$ ./autogen<br>
|
|
|
|
$ ./configure<br>
|
|
|
|
$ make</p>
|
|
|
|
<p>Les binaires produits sont :</p>
|
|
|
|
<ul>
|
|
|
|
<li> <span class="code">src/rle2/eydrle2</span></li>
|
|
|
|
<li><span class="code">src/rle1/eydrle</span></li>
|
|
|
|
</ul>
|
|
|
|
<h3><a name="4.2._Utilisation"></a>4.2.
|
|
|
|
Utilisation</h3>
|
|
|
|
<div style="text-align: justify;">Les
|
|
|
|
binaires de EnlargeYourData doivent être appelés
|
|
|
|
avec la syntaxe suivante:<br>
|
|
|
|
</div>
|
|
|
|
<p class="code">Usage:
|
|
|
|
eydrleX <parametres_obligatoires> <options><br>
|
|
|
|
</p>
|
|
|
|
<p>Les paramètres obligatoires sont
|
|
|
|
les suivants:</p>
|
|
|
|
<ul>
|
|
|
|
<li><span style="font-style: italic;">-m, --mode (c|u)</span>:
|
|
|
|
"c" pour compresser, "u" pour décompresser,</li>
|
|
|
|
<li><span style="font-style: italic;">-i, --input</span>
|
|
|
|
<fichier>: Le fichier original à compresser ou
|
|
|
|
décompresser,</li>
|
|
|
|
</ul>
|
|
|
|
<p>Les parames optionnels sont les
|
|
|
|
suivants:</p>
|
|
|
|
<ul>
|
|
|
|
<li>-o, --output
|
|
|
|
<fichier>: Le fichier resultant de la compression ou
|
|
|
|
décompression,</li>
|
|
|
|
<li>-c, --cellsize
|
|
|
|
<entier> : La tailles des blocs de bits
|
|
|
|
utilisés pour la compression.</li>
|
|
|
|
</ul>
|
|
|
|
<h2><a name="5._Documentation"></a>5.
|
|
|
|
Documentation</h2>
|
|
|
|
<h3>5.1. Code</h3>
|
|
|
|
<p>Vous pouvez trouver la
|
|
|
|
documentation de EnlargeYourData dans le dossier <span class="code">doc/html</span>
|
|
|
|
de l'application, ou en suivant <a href="html/index.html">ce lien</a>.</p>
|
|
|
|
<h3>5.2. Le marqueur RLE</h3>
|
|
|
|
<p>Il s'agit de la valeur zéro écrite sur X bits (X
|
|
|
|
étant la taille de cellules choisies pour la compression).</p>
|
|
|
|
<p>Dans le cas ou dans le texte à compresser, on retrouver le
|
|
|
|
marqueur RLE, alors celui-ci est dupliqué. Cependant, cela n'est
|
|
|
|
pas efficace lorsque l'on rencontre plus de deux fois d'affilée
|
|
|
|
le marqueur, car cela génèrerait une suite dont la taille
|
|
|
|
serait plus grande que 4, or avec RLE toute suite d'au moins 3
|
|
|
|
cellules identiques se compresse en 3 cellules</p>
|
|
|
|
<h3>5.3. Les
|
|
|
|
fichiers de test</h3>
|
|
|
|
Les programmes de compression ont été testés sur
|
|
|
|
plusieurs fichiers de types différents: <br>
|
|
|
|
<ul>
|
|
|
|
<li>application/data, </li>
|
|
|
|
<li>application/ogg, </li>
|
|
|
|
<li>image/jpeg, </li>
|
|
|
|
<li>image/x-ms-bmp (mode RAW), </li>
|
|
|
|
<li>image/x-portable-pixmap, </li>
|
|
|
|
<li>image/pcx (fichier deja compressé en RLE), </li>
|
|
|
|
<li>text/plain </li>
|
|
|
|
</ul>
|
|
|
|
<h3>Les taux de compression</h3>
|
|
|
|
<p>Pour RLE1, on obtient, dans le meilleur des cas (pour la taille X de
|
|
|
|
cellules de bits comprise entre 3 et 32):</p>
|
|
|
|
<ul>
|
|
|
|
<li>application/data : X=8 ,Ratio=100.39%</li>
|
|
|
|
<li>application/ogg : X=30, Ratio=100%</li>
|
|
|
|
<li>image/x-ms-bmp (mode RAW)-test 1 : X=3, Ratio=93.14%</li>
|
|
|
|
<li>image/x-ms-bmp (mode RAW)-test 2: X=8, Ratio=14.43%</li>
|
|
|
|
<li>image/x-portable-pixmap : X=6, Ratio=25.69%</li>
|
|
|
|
<li>image/pcx (fichier deja compressé en RLE) :
|
|
|
|
X=16, Ratio=95.97%</li>
|
|
|
|
<li>text/plain test1 : X=, Ratio=76.19%</li>
|
|
|
|
<li>text/plain test1 : X=, Ratio=99.70%</li>
|
|
|
|
</ul>
|
|
|
|
<p>Par contre en ce qui concerne RLE2, dans la majorité des cas,
|
|
|
|
les fichiers produits sont plus gros que les originaux... </p>
|
|
|
|
<p>Cependant, on peut utiliser la tendance au "gaspillage" de RLE2
|
|
|
|
(lorsqu'il souhaite stocker une petite valeurs sur une cellule trop
|
|
|
|
grande), a des fins de compression, en appliquant une compression
|
|
|
|
par RLE1 sur le fichier produit.</p>
|
|
|
|
<p>Dans le cas des fichiers MS-Bitmap on peut souvent descendre
|
|
|
|
à la moitié de ce que produit RLE1 tout seul.</p>
|
|
|
|
<br>
|
|
|
|
<h3>Les utilisations de RLE</h3>
|
|
|
|
On retrouve le format RLE utilisé principalement dans ce qui
|
|
|
|
concerne le stockage d'images, notamment les images en couleurs
|
|
|
|
indexées (noir et blanc, et palettes de couleurs).<br>
|
|
|
|
Il est présent (par exemple) : <br>
|
|
|
|
- dans la compression utilisée par les fax<br>
|
|
|
|
- dans une variante du format BMP (image/x-ms-bmp),<br>
|
|
|
|
- dans le format d'images PCX (utilisant des palettes de couleurs, et
|
|
|
|
très utilisé à l'époque du DOS sur PC).<br>
|
|
|
|
<p>On retrouve également souvent RLE associé à un
|
|
|
|
autre algorithme de compression (voir le cours de C.Choffrut, cours sur
|
|
|
|
Huffman).</p>
|
|
|
|
<h3>Les problèmes posés par RLE2</h3>
|
|
|
|
RLE2, sans le codage de Golomb, nécessite la
|
|
|
|
spécification d'une taille de cellule pour stocker la taille des
|
|
|
|
entiers representant les suites de 0. Or arrive (fréquement
|
|
|
|
dans le cas des images noir et blanc) que ces entiers dépassent
|
|
|
|
le plus grand nombre stockable (2^X - 1) sur cellule de X bits. <br>
|
|
|
|
On peut soit considèrer que la compression est impossible avec
|
|
|
|
cette taille de cellule (comme réalisé dans le code du
|
|
|
|
TP), soit on peut evisager des solutions un peu plus complexes,
|
|
|
|
consistant à :<br>
|
|
|
|
<ul>
|
|
|
|
<li>Considérer que la cellule suivant une cellule dont la
|
|
|
|
valeur est (2^X - 1 ) représente la "suite" du codage de la
|
|
|
|
même suite. Ainsi sur 3 bits, on codera la suite 00100000...0001
|
|
|
|
(20 zéros entre les deux "1") de la façon suivante :<br>
|
|
|
|
"2 7 7 4 0"<br>
|
|
|
|
Dans ce cas, on "perdra" une cellule (qui sera fixée à 0)
|
|
|
|
dans le cas ou l'on rencontrera sur une suite de longueur multiple de
|
|
|
|
(2^X - 1).</li>
|
|
|
|
<li>L'autre technique consiste à garder la valeur maximum
|
|
|
|
d'une cellule comme caractère d'échappement [RLE2], pour
|
|
|
|
ensuite coder de la façon suivante sur 3 bits:
|
|
|
|
001000....0001 (20 zéros entre les deux "1") : <br>
|
|
|
|
"2 [RLE2] 7 7 4 [RLE2] 0"</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
<
|
|
|
|
</body>
|
|
|
|
</html>
|