PNG est généralement un système de compression sans perte, ce qui signifie que la qualité d'image ne se réduit jamais à moins que vous réduisez le nombre de pixels (taille) ou la profondeur de couleur. Il existe trois façons de réduire la taille de fichier des images PNG:
- Réduisez le nombre de pixels (en réduisant la taille de l'image); il y a une perte évidente de la résolution ici
- En utilisant un paramètre de compression filtres de précompression différents/dégonflage (OptiPNG est mon outil préféré choisir automatiquement la meilleure combinaison de filtres/paramètres de compression)
- Réduire la profondeur de couleur de la vraie couleur à 256 (ou moins) les couleurs vous donneront des économies substantielles d'octets, mais habituellement à un coût visuel élevé (en particulier pour les images photographiques)
Il semble que .NET ne dispose pas d'un moyen intégré pour changer les filtres de précompression ou les paramètres du compresseur. de PNG, vous devrez donc utiliser une bibliothèque externe. OptiPNG ou l'un des outils d'optimisation PNG other ne sont pas des bibliothèques .NET natives, vous devrez donc faire appel à P/Appeler les bibliothèques ou exécuter un processus séparé pour traiter chaque image. Cependant, vous envisagez souvent des économies d'environ 5% ou moins (bien que j'en ai vu jusqu'à 40%), car il s'agit en définitive d'un processus sans perte.
Je recommanderais de ne pas réduire la profondeur de couleur dans le scénario automatisé que vous décrivez, car les résultats peuvent sembler vraiment horribles (pensez aux GIF tramés d'antan). (Cependant, si vous faites l'optimisation manuelle, regardez Color Quantizer sur Windows et ImageAlpha sur Mac.)
De manière réaliste, la meilleure façon de réduire la taille des fichiers au détriment de la qualité est de simplement convertir en JPEG, ce qui nécessite aucune dépendance externe, et est conçu pour être un algorithme de compression avec perte:
mainImg.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg); // make sure you change `filePath` to end with jpg instead of png.
"pour .net 4.0 ou sous": désolé, j'en ai seulement un pour .NET 5.0;) –
Quelle est votre réponse pour .NET 5 par curiosité? – Dylan
Je parie qu'il y en aura sur la seule base de la version 4.5 :) –