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 :

Réduire le poids d'images PNG


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2010
    Messages : 36
    Par défaut Réduire le poids d'images PNG
    Bonjour,

    Je suis en train de faire une petite appli qui prendrait en paramètre des images au format PNG-24 et PNG-8 et qui les enregistre en PNG-8 avec la taille la plus petite possible (peut importe la perte de qualité).

    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
            private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
            {
                string[] images = openFileDialog1.FileNames;
                foreach (string xImage in images)
                {
                    // Création de l'objet Image
                    System.IO.FileInfo fileInfo = new System.IO.FileInfo(xImage);
                    System.IO.FileStream fileStream = fileInfo.OpenRead();
                    System.Drawing.Image aImage = System.Drawing.Image.FromStream(fileStream);
                    fileStream.Close();
     
                    ImageFormat sourceFormat = aImage.RawFormat;
     
                    System.Drawing.Imaging.Encoder[] enc = new System.Drawing.Imaging.Encoder[3];
                    enc[0] = System.Drawing.Imaging.Encoder.ColorDepth;
                    enc[1] = System.Drawing.Imaging.Encoder.Compression;
                    enc[2] = System.Drawing.Imaging.Encoder.Quality;
     
                    EncoderParameter[] epX = new EncoderParameter[3];
     
                    epX[0] = new EncoderParameter(enc[0], 8L);
                    epX[1] = new EncoderParameter(enc[1], (long)EncoderValue.CompressionLZW);
                    epX[2] = new EncoderParameter(enc[2], 0L);
     
                    EncoderParameters eps = new EncoderParameters(3);
                    eps.Param[0] = epX[0];
                    eps.Param[1] = epX[1];
                    eps.Param[2] = epX[2];
     
                    aImage.Save(xImage.Replace(Path.GetExtension(xImage), "(m)" + Path.GetExtension(xImage)), GetEncoder(sourceFormat), eps);
                }
     
            }
     
            private ImageCodecInfo GetEncoder(ImageFormat format)
            {
                foreach (var info in ImageCodecInfo.GetImageEncoders())
                    if (info.FormatID == format.Guid)
                        return info;
                return null;
            }
    Le problème est que soit les images ne changent pas de poids, soit elle deviennent plus lourde.

    Quelqu'un pourrait il me dire ce qui ne va pas dans le code ?

  2. #2
    Membre chevronné Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Par défaut
    J'ai essayé avec les autres types de format, ça marche impec'. Peut être que l'encodeur png ne supporte pas ces paramètres.

    Sinon tu peut regarder du coté de la classe PngBitmapEncoder
    http://msdn.microsoft.com/fr-fr/library/aa970062.aspx

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Pour rappel, le PNG utilise une compression sans perte...

    Le paramètre Quality n'a donc aucun sens pour cet encodeur, sauf erreur.

    Pas de miracle pour diminuer la taille des PNG, il faut passer par du JPG et utiliser une compression aggressive...

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Par défaut
    Je suis pas un expert en la matière, mais il semblarait que tu ne joues que sur la compression, pas sur la taille... (même si en PNG, la compression ne veut pas dire la même chose qu'en Jpg)
    Peut être que ceci peut t'inspirer.
    Je pense qu'il faut appliquer le même principe, cad passer par un bitmap, faire le resize et ensuite réencoder mais en PNG.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 251
    Par défaut
    Terrible, je viens d'ici une heure à chercher à prendre une image lui mettre une profondeur de couleur de 8 et l'enregistrer en PNG : ça ne fonctionne pas comme je le souhaiterais

Discussions similaires

  1. [Débutant] extraction bits de poids faible (LSB) de la palette d'une image png
    Par dedeff dans le forum MATLAB
    Réponses: 1
    Dernier message: 20/02/2015, 09h18
  2. réduire le poids des images?
    Par Lionel_aw dans le forum Langage
    Réponses: 3
    Dernier message: 18/08/2011, 09h49
  3. réduire le poid d'une image de 6Ko à 0,8 Ko
    Par z_ahlam dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 10/01/2011, 14h05
  4. Réduire une image png
    Par Gaelou dans le forum Java ME
    Réponses: 3
    Dernier message: 24/11/2008, 17h45
  5. [Image]setCursor() et les images *.png
    Par feed_our_vision dans le forum Graphisme
    Réponses: 4
    Dernier message: 13/09/2004, 01h51

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