IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] Pourquoi mon fichier est plus gros après compression ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut [C#] Pourquoi mon fichier est plus gros après compression ?
    Tout est dans le titre

    J'utilise la classe GZipStream et certains fichiers sont plus gros après compression. Cela fonctionne bien avec des fichiers texte, mais pour les images, les pdf et d'autres, le fichier compressé est plus gros que le fichier à compresser, je ne crois pas faire d'erreur pourtant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    string filename = "monFichier";
    byte[] buffer = File.ReadAllBytes(filename);
    MemoryStream ms = new MemoryStream();
    GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Compress, true);
    compressedzipStream.Write(buffer, 0, buffer.Length);
    compressedzipStream.Close();
    Est-ce moi qui débloque ou bien le GZipStream est à éviter ?

  2. #2
    Expert confirmé
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Par défaut
    Salut,

    Ben si tu compresses un mp3, un divx ou une image ce sont des formats déjà compressés donc tu ne peux pas plus les compresser et la taille augmente puisque tu changes de format donc tu dois rajouter des infos pour la décompression.

    Bon avec winrar t'arriveras toujours à gagner quelques ko car c'est un des must en ce qui concerne la compression mais pour GZip ça ne m'étonne pas plus que ça

  3. #3
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Citation Envoyé par StormimOn
    Cela fonctionne bien avec des fichiers texte, mais pour les images, les pdf et d'autres, le fichier compressé est plus gros que le fichier à compresser...
    Là par contre c'est étonnant vraiment, tu es sûr que celà ne fonctionne que sur du .txt

  4. #4
    Membre Expert
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Par défaut
    Salut,

    Quelle est la taille du fichier original ? Quelle est la difference de taille ?

    Pace que la classe GZipStream ajoute un header qui permettera de decompresser ton strean avec un outil GZip, alors comme a dit neo.51, si ton fichier est deja compressé, le header peut augmenter la taille de ton fichier mais seulement de quelques Ko.

    Si la decompression va se passer seulement dans ton systeme alors utilise plutot la classe DeflateStream.

  5. #5
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Je referais des tests ce soir, si je peux, avec plusieurs types de fichier pour vous donner des chiffres si vous voulez, mais les résultats ne sont en général probants que pour les fichiers texte.

    J'ai une API qui possède des méthodes pour faire ce genre de chose (compression GZip + encodage base 64) et je cherchais à faire pareil avec le framework pour pouvoir me passer de l'API à ce niveau. Je mettrais également en correspondance les résultats de compression avec l'API pour info.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    bon, c'est normal. Comme déjà dit précédemment, les images codé en JPEG sont deja compressées, PNG aussi.
    Meme s'il s'agit d'une compression avec perte de données, c'est une compression.

    Que ta compression marche sur du texte c'est normal. Ensuite il doit bien y avoir des règlages de performances.
    En effet, il ya plusieurs algorithmes de compressions, mais ils sont tous plus ou moins basés sur le meme concept.
    Ensuite, si c'est une compression par dictionnaire, ce qui je pense est le cas, il doit y avoir quelque part une option permettant de changer la taille du dictionnaire.
    Plus la taille est grande, plus tes chances de compresser sont grandes, mais attention il y a un revers de médaille. Ca peut également fortement augmenter la taille du fichier de sortie, car l'enthropie et les infos stoquées dans le dictionnaire serons trop nombreuses et la compression peut échouer.
    Générallement, des images jpeg devraient quand meme pouvoir etre compressées car la compression utilisée est de type huffman ou norme similaire. Dans tous les cas, la compression de jpeg ne vient pas de l'algorithme de compression en lui meme mais, de l'algorithme de lissage qui détermine les pertes.
    En revanche, compresser un flux binaire, style .exe ne garantie pas une compression sure à 100%, tout dépend si des modeles extrait dénotes une certaine anthropie.

    Donc meme avec des compresseurs comme Winrar, il n'est pas rare de voir un flux compressé plus important que le flux non compressé. Et oui, il ne faut pas tenir compte que du header. Ce serait une erreur. Un flux compressé peut dépasser de 25% le flux non compressé en moyenne, lorsque la compression est "impossible". Si toutefois, l'écart devait dépassé 25%, là il faudrait se poser des question, sauf si tu travail sur des flux particulierement cours et petits (< 10ko)
    Ah oui les compressions sont souvent inutiles sur des flux inférieur à 10ko, les résultats sont très souvent décevant si le flux est binaire sans redondance (comme les fichiers textes ou la redondance est "normale").

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 4
    Par défaut c'est normal ?!?
    J'ai juste un petit problème, car quand je compress un fichier word de 1,2 Mo avec GZipStream il se trouve que le résultat est un fichier de 1,44Mo.
    Alors, admettez que pour un fichier Word c'est un petit génant, j'éspère que Microsoft va faire un éffort pour améiorer tout ça ;-)

Discussions similaires

  1. pourquoi mon fichier est-il passé de 200 k à 8M?
    Par nath-0-0 dans le forum Excel
    Réponses: 7
    Dernier message: 12/05/2010, 17h54
  2. Réponses: 6
    Dernier message: 12/02/2007, 19h24
  3. Pourquoi mon code est plus lent que Arrays.sort
    Par alexis779 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/12/2006, 12h44
  4. [C#] ftp : pourquoi mon fichier à uploader n'est pas accessible ?
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 3
    Dernier message: 12/09/2006, 14h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo