2017-03-25 2 views
0

J'ai utilisé cette méthode pour redimensionner les images .JPG téléchargées sur une largeur maximale, mais les images sont plus volumineuses en kb que la source. Qu'est-ce que je fais mal? Y a-t-il autre chose que je dois faire lorsque je sauvegarde la nouvelle image?Le redimensionnement de l'image entraîne une taille de fichier massivement plus grande que l'original C#

J'ai essayé toutes sortes de combinaisons de PixelFormat, par ex. PixelFormat.Format16bppRgb555

Ex: image source est un .JPG 1900W, en essayant de redimensionner à 1200W ...
- fichier source est 563KB,
- fichier redimensionnée est 926KB ou plus, même

1.9MB
public static void ResizeToMaxWidth(string fileName, int maxWidth) 
{ 
    Image image = Image.FromFile(fileName); 

    if (image.Width > maxWidth) 
    { 
     double ratio = ((double)image.Width/(double)image.Height); 
     int newHeight = (int)Math.Round(Double.Parse((maxWidth/ratio).ToString())); 

     Bitmap resizedImage = new Bitmap(maxWidth, newHeight); 

     Graphics graphics = Graphics.FromImage(resizedImage); 
     graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 
     graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; 
     graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High 

     Rectangle rectDestination = new Rectangle(0, 0, maxWidth, newHeight); 
     graphics.DrawImage(image, rectDestination, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel);    
     graphics.Dispose(); 

     image.Dispose(); 
     resizedImage.Save(fileName); 
     resizedImage.Dispose(); 
    } 
    image.Dispose(); 
} 
+0

Utilisez-vous des fichiers jpg? Parlez-vous de la taille du disque? C'est pour le jpg principalement décidé par le paramètre de qualité d'encodage. Vous devriez ajouter un codeur explicite à Cotrol! – TaW

+0

J'ai modifié ma question pour refléter le fait que je télécharge principalement des jpgs. S'il vous plaît ajouter une réponse si vous en avez un merci! – Dave

+0

La classe bitmap ne détecte pas le format de l'extension de fichier. Vous l'enregistrez probablement dans un format png avec une extension de fichier jpeg. Vous devez fournir le second paramètre à la méthode de sauvegarde. – john

Répondre

2

vous devez spécifier que vous souhaitez enregistrer en tant que format jpeg:

resizedImage.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg); 

Sinon, il sera par défaut pour l'enregistrement au format BMP/PNG (je ne me souviens pas qui).

+1

PNG pour référence. Merci encore. Génie. – Dave