Ich habe eine Kanonen-Digitalkamera und stelle sie so ein, dass sie Bilder mit superfeiner Qualität aufnimmt und eine .jpg-Datei mit einer Größe von 3 Megabyte ausgibt. Wenn ich sie so in ASP.NET lade (dies ist nützlich, um die dpi-Auflösung zu ändern oder sie zu beschneiden oder was auch immer)
imgPicture = Image.FromFile(Config.WorkDirectory + this.TempPhotoName);
bmpPicture = new Bitmap(imgPicture);
und dann speichere ich es wieder so:
bmpModified.Save(Config.WorkDirectory + this.TempPhotoName,System.Drawing.Imaging.ImageFormat.Jpeg);
Es gibt ein jpg aus, das nur etwa 700 KB groß ist. Das ist ein Qualitätsverlust.
Ich habe auch versucht, es auf diese Weise zu speichern:
bmpPicture.Save(Config.WorkDirectory + this.TempPhotoName, codecJpeg, encparams);
wobei codecJpeg für
ImageCodecInfo codecJpeg = this.getEncoderInfo("image/jpeg");
private ImageCodecInfo getEncoderInfo(string mimeType)
{
// Get image codecs for all image formats
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
// Find the correct image codec
for (int i = 0; i < codecs.Length; i++)
if (codecs[i].MimeType == mimeType)
return codecs[i];
return null;
}
und encparams:
EncoderParameters encparams = new EncoderParameters(1);
encparams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 97L);
Auf diese Weise wird die Größe (und ich vermute, auch die Qualität) beibehalten, aber ich gebe die Qualität von Hand ein.
Ich möchte fragen:
Gibt es eine Möglichkeit, das Bild mit der gleichen Qualität zu speichern, wie es geladen wurde, ohne den Qualitätswert fest zu kodieren?
Ich danke Ihnen im Voraus