Ridimensiona un'immagine con .NET senza perdere i dati EXIF
Domanda
Qual è il modo migliore per ridimensionare le immagini utilizzando .NET, senza perdere i dati EXIF? Sto bene usando le classi System.Drawing. * Di .NET 2, le classi WPF o le librerie open-source.
L'unico modo semplice che ho trovato per gestire tutto questo per ora è usare Graphics.FromImage (.NET 2) per eseguire il ridimensionamento e riscrivere i dati EXIF ??con una libreria OpenSource manualmente (ogni pezzo di dati uno di uno).
Soluzione
Il tuo suggerimento di estrarre i dati EXIF ??prima di ridimensionare e quindi reinserire i dati EXIF ??sembra una soluzione decente.
I dati EXIF ??possono essere definiti solo per formati come JPEG e TIFF: quando si carica tale immagine in un oggetto grafico per il ridimensionamento, si sta essenzialmente convertendo l'immagine in una normale bitmap. Quindi, perdi i dati EXIF.
Discussione leggermente correlata sull'estrazione di EXIF ??usando C # qui .
Altri suggerimenti
Ho usato Magick .NET e ho creato 2 metodi di estensione:
public static byte[] ToByteArray(this Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
return ms.ToArray();
}
public static Image AttachMetadData(this Image imgModified, Image imgOriginal)
{
using (MagickImage imgMeta = new MagickImage(imgOriginal.ToByteArray()))
using (MagickImage imgModi = new MagickImage(imgModified.ToByteArray()))
{
foreach (var profileName in imgMeta.ProfileNames)
{
imgModi.AddProfile(imgMeta.GetProfile(profileName));
}
imgModified = imgModi.ToImage();
}
return imgModified;
}