This commit is contained in:
parent
906a4b4ace
commit
b77ad8af59
2 changed files with 300 additions and 0 deletions
33
doc/eyd.css
Normal file
33
doc/eyd.css
Normal file
|
@ -0,0 +1,33 @@
|
|||
/* Generated by CaScadeS, a stylesheet editor for Mozilla Composer */
|
||||
|
||||
p.code { border: 2px dashed rgb(153, 153, 153);
|
||||
padding: 5px;
|
||||
background: rgb(204, 204, 204) none repeat scroll 0% 50%;
|
||||
-moz-background-clip: initial;
|
||||
-moz-background-origin: initial;
|
||||
-moz-background-inline-policy: initial;
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
div.page { border: 2px dashed rgb(153, 153, 153);
|
||||
padding: 10px;
|
||||
top: 10px;
|
||||
left: 10px;
|
||||
right: 10px;
|
||||
bottom: 10px;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
background-color: rgb(255, 255, 255);
|
||||
opacity: 1;
|
||||
width: 60%;
|
||||
font-family: Arial,Helvetica,sans-serif;
|
||||
}
|
||||
|
||||
body { background-color: rgb(51, 51, 51);
|
||||
}
|
||||
|
||||
span.code { border: 1px dashed rgb(153, 153, 153);
|
||||
background-color: rgb(204, 204, 204);
|
||||
font-family: monospace;
|
||||
}
|
||||
|
267
doc/index.html
Normal file
267
doc/index.html
Normal file
|
@ -0,0 +1,267 @@
|
|||
<!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>
|
||||
<li><a href="#3._Se_procurer_MiniFTPc">Se procurer
|
||||
EnlargeYourData</a></li>
|
||||
<li><a href="#4._Utiliser_MiniFTPc">Utiliser EnlargeYourData</a></li>
|
||||
<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>
|
||||
<h2><a name="3._Se_procurer_MiniFTPc"></a>3.
|
||||
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>
|
||||
<a href="http://glenux2.free.fr/pub/projets/MiniFTPc/archives/">http://glenux2.free.fr/pub/projets/EnlargeYourData/archives/</a><br>
|
||||
<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>
|
||||
<h2><a name="4._Utiliser_MiniFTPc"></a>4.
|
||||
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>
|
Loading…
Reference in a new issue