Ho una fotocamera digitale cannone e l'ho impostato per scattare foto con qualità superfine e genera un file .jpg di 3 mega. Se carico come questo in ASP.NET (questo è utile per cambiare è dpi di risoluzione o ritagliare o whaterver). NET Salvataggio jpeg con la stessa qualità come è stato caricato
imgPicture = Image.FromFile(Config.WorkDirectory + this.TempPhotoName);
bmpPicture = new Bitmap(imgPicture);
e poi salvarlo di nuovo in questo modo:
bmpModified.Save(Config.WorkDirectory + this.TempPhotoName,System.Drawing.Imaging.ImageFormat.Jpeg);
esso emette un jpg di dimensioni pari a solo 700 KB. C'è una perdita di qualità.
Ho anche provato il risparmio in questo modo:
bmpPicture.Save(Config.WorkDirectory + this.TempPhotoName, codecJpeg, encparams);
dove codecJpeg è
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;
}
e encparams:
EncoderParameters encparams = new EncoderParameters(1);
encparams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 97L);
In questo modo la dimensione (e ho il sospetto anche la qualità) viene mantenuto, ma sto inserendo la qualità a mano.
voglio chiedere:
C'è un modo per salvare l'immagine con la stessa qualità come è stato caricato senza hardcoding il valore di qualità?
Grazie in anticipo
Impostazione PropertyItems e salvare porterà alla perdita di qualità, perché l'immagine viene ricodificato. Maggiori informazioni qui: http://stackoverflow.com/questions/1038206/net-c-library-for-lossless-exif-rewriting – arbiter
Sì, apprezzo che sarà ricodificato - ma penso che abbia senso ricodificare all'incirca la stessa "perdita" dell'originale, se lo si desidera. Stai ancora andando a perdere dati, ma probabilmente non è una grande quantità. Si noti inoltre che non stavo parlando di * setting * PropertyItems - stavo parlando di * recupero * per scoprire la qualità originale, anche se questo non sembra avere i dati rilevanti. –
Bene esiste un elemento propertyitem per il recupero della qualità jpeg - PropertyTagJPEGQuality, ma è indicato come tag privato per adobe photoshop, quindi non so se è riempito dalla fotocamera o meno. Comunque c'è un po 'di senso di memorizzare jpeg con lo stesso valore di qualità jpeg, perché la perdita di qualità sarà lì. – arbiter