This commit is contained in:
glenux 2005-10-31 17:48:00 +00:00
parent 906a4b4ace
commit b77ad8af59
2 changed files with 300 additions and 0 deletions

33
doc/eyd.css Normal file
View 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
View 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&eacute;-requis</a></li>
<ol>
<li><a href="#2.1._Sur_un_syst%E8me_Debian_GNULinux">Sur un
syst&egrave;me Debian GNU/Linux</a></li>
<li><a href="#2.2._Sur_un_syst%E8me_Apple_MacOS_X_">Sur un
syst&egrave;me Apple MacOSX (&ge;10.3)</a></li>
<li><a href="#2.3._Sur_un_syst%E8me_Microsoft_Windows">Sur
un syst&egrave;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&nbsp;logiciel libres de compression/d&eacute;compression de
fichiers, bas&eacute;s sur l'algorithme RLE et ses variation. Il
poss&egrave;de les caract&eacute;ristiques
suivantes :</p>
<ul>
<li>Il est distribu&eacute;
sous la licence&nbsp;<a href="http://www.gnu.org/copyleft/gpl.html">GNU
General Public License</a></li>
<li>Il
est &eacute;crit en C++ et poss&egrave;de une interface
textuelle</li>
<li><span style="font-weight: bold;"></span>Il
implemente RLE (suite de motifs identiques),</li>
<li>Il
impl&eacute;mente&nbsp;la variante de RLE (on l'appellera RLE2 dans la
suite de ce document) encodant les
bits &agrave; z&eacute;ros entre les bits &agrave; un.</li>
<li>Il n'implemente pas (a l'heure actuelle) RLE2 avec le&nbsp;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
&eacute;t&eacute; enti&egrave;rement
r&eacute;alis&eacute; par Glenn ROLLAND &lt;<a
href="mailto:glenux@fr.st">glenux@fr.st</a>&gt;
&agrave; l'occasion de travaux pratiques du cours de format de
documents et compression du Master 2 Ing&eacute;nierie Informatique
-
Syst&egrave;mes, R&eacute;seaux et Internet.</p>
<h2><a99 name="2._Pr&eacute;-requis">2.
Pr&eacute;-requis</a99></h2>
<p>EnlargeYourData
n&eacute;cessite les biblioth&egrave;ques de fonctions
suivantes (dans
leur version de d&eacute;veloppement si compilez le programme
vous-m&ecirc;me):</p>
<ul>
<li>glib-2.0</li>
</ul>
<h3><a name="2.1._Sur_un_syst&egrave;me_Debian_GNULinux"></a>2.1.
Sur un syst&egrave;me
Debian GNU/Linux</h3>
<p>Il vous suffit de taper (en
tant qu'administrateur) les
commandes suivantes pour installer le n&eacute;cessaire:&nbsp;</p>
<p class="code"># apt-get
install libglib-2.0-dev</p>
<h3><a name="2.2._Sur_un_syst&egrave;me_Apple_MacOS_X_"></a>2.2.
Sur un syst&egrave;me Apple MacOS X (&gt;= 10.3)</h3>
<p>
Il est n&eacute;cessaire d'avoir install&eacute; <span
style="font-style: italic;"></span>les&nbsp;<span
style="font-style: italic;">autotools</span>
(automake, autoconf...) dans leur derni&egrave;re
version.&nbsp;&Agrave; partir de l&agrave;, 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&egrave;me_Microsoft_Windows"></a>2.3.
Sur un syst&egrave;me Microsoft Windows</h3>
Cela ne fut pas (encore) test&eacute;, mais il est tr&egrave;s
probable que cela fonctionne&nbsp;sous Cygwin.<br>
<h2><a name="3._Se_procurer_MiniFTPc"></a>3.
Se procurer EnlargeYourData</h2>
Vous
pouvez t&eacute;l&eacute;charger la derni&egrave;re archive
des
sources, ou bien directement la version la plus r&eacute;cente du
projet sur le d&eacute;p&ocirc;t Subversion du projet.<br>
<h3>3.1. L'archive des sources</h3>
Elle est disponible &agrave; 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&eacute;p&ocirc;t Subversion</h3>
<p>Afin d'obtenir les sources les
plus &agrave; jour, vous pouvez utiliser le logiciel de
contr&ocirc;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&eacute;e" pour l'utilisateur "anonymous", si ce dernier vous
est
demand&eacute;.</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&eacute;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'&ecirc;tre cr&eacute;&eacute; lors de
la d&eacute;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>&nbsp;<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 &ecirc;tre appel&eacute;s
avec la syntaxe suivante:<br>
</div>
<p class="code">Usage:
eydrleX &lt;parametres_obligatoires&gt; &lt;options&gt;<br>
</p>
<p>Les param&egrave;tres obligatoires sont
les suivants:</p>
<ul>
<li><span style="font-style: italic;">-m, --mode (c|u)</span>:
"c" pour compresser, "u" pour d&eacute;compresser,</li>
<li><span style="font-style: italic;">-i, --input</span>
&lt;fichier&gt;: Le fichier original &agrave; compresser ou
d&eacute;compresser,</li>
</ul>
<p>Les parames optionnels sont les
suivants:</p>
<ul>
<li>-o, --output
&lt;fichier&gt;: Le fichier resultant de la compression ou
d&eacute;compression,</li>
<li>-c, --cellsize
&lt;entier&gt; : La tailles des blocs de bits
utilis&eacute;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&eacute;ro &eacute;crite sur X bits (X
&eacute;tant la taille de cellules choisies pour la compression).</p>
<p>Dans le cas ou dans le texte &agrave; compresser, on retrouver le
marqueur RLE, alors celui-ci est dupliqu&eacute;. Cependant, cela n'est
pas efficace lorsque l'on rencontre plus de deux fois d'affil&eacute;e
le marqueur, car cela g&eacute;n&egrave;rerait une suite dont la taille
serait plus grande que 4, or avec RLE toute suite d'au moins&nbsp;3
cellules identiques se compresse en 3 cellules</p>
<h3>5.3. Les
fichiers de test</h3>
Les programmes de compression ont &eacute;t&eacute; test&eacute;s sur
plusieurs fichiers de types diff&eacute;rents: <br>
<ul>
<li>application/data,&nbsp;</li>
<li>application/ogg,&nbsp;</li>
<li>image/jpeg,&nbsp;</li>
<li>image/x-ms-bmp (mode RAW),&nbsp;</li>
<li>image/x-portable-pixmap,&nbsp;</li>
<li>image/pcx (fichier deja compress&eacute; en RLE),&nbsp;</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,&nbsp;Ratio=100%</li>
<li>image/x-ms-bmp (mode RAW)-test 1 : X=3,&nbsp;Ratio=93.14%</li>
<li>image/x-ms-bmp (mode RAW)-test 2: X=8,&nbsp;Ratio=14.43%</li>
<li>image/x-portable-pixmap : X=6,&nbsp;Ratio=25.69%</li>
<li>image/pcx (fichier deja compress&eacute; en RLE) :
X=16,&nbsp;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&eacute; des cas,
les fichiers produits sont plus gros que les originaux... &nbsp;</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&nbsp;appliquant une compression
par RLE1 sur le fichier produit.</p>
<p>Dans le cas des fichiers MS-Bitmap on peut souvent descendre
&agrave; la moiti&eacute; de ce que produit RLE1 tout seul.</p>
<br>
<h3>Les utilisations de RLE</h3>
On retrouve le format RLE utilis&eacute; principalement dans ce qui
concerne le stockage d'images, notamment les images en couleurs
index&eacute;es (noir et blanc, et palettes de couleurs).<br>
Il est pr&eacute;sent (par exemple) : <br>
- dans la compression utilis&eacute;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&egrave;s utilis&eacute; &agrave; l'&eacute;poque du DOS sur PC).<br>
<p>On retrouve &eacute;galement souvent RLE associ&eacute; &agrave; un
autre algorithme de compression (voir le cours de C.Choffrut, cours sur
Huffman).</p>
<h3>Les probl&egrave;mes pos&eacute;s par RLE2</h3>
RLE2, sans le codage de Golomb, n&eacute;cessite la
sp&eacute;cification d'une taille de cellule pour stocker la taille des
entiers representant les suites de 0. Or&nbsp;arrive (fr&eacute;quement
dans le cas des images noir et blanc) que ces entiers d&eacute;passent
le plus grand nombre stockable (2^X - 1) sur cellule de X bits. <br>
On peut soit consid&egrave;rer que la compression est impossible avec
cette taille de cellule (comme r&eacute;alis&eacute; dans le code du
TP), soit on peut evisager des solutions un peu plus complexes,
consistant &agrave; :<br>
<ul>
<li>Consid&eacute;rer que la cellule&nbsp;suivant une cellule dont la
valeur est (2^X - 1 ) repr&eacute;sente la "suite" du codage de la
m&ecirc;me suite. Ainsi sur 3 bits, on codera la suite 00100000...0001
(20 z&eacute;ros entre les deux "1") de la fa&ccedil;on suivante :<br>
"2 7 7 4 0"<br>
Dans ce cas, on "perdra" une cellule (qui sera fix&eacute;e &agrave; 0)
dans le cas ou l'on rencontrera sur une suite de longueur multiple de
(2^X - 1).</li>
<li>L'autre technique consiste &agrave; garder la valeur maximum
d'une cellule comme caract&egrave;re d'&eacute;chappement [RLE2], pour
ensuite coder de la fa&ccedil;on suivante sur 3 bits:&nbsp;
001000....0001 (20 z&eacute;ros entre les deux "1") : <br>
"2 [RLE2] 7 7 4 [RLE2] 0"</li>
</ul>
</div>
&lt;
</body>
</html>