2009-08-05 10 views
5

Qual è il modo migliore per ridimensionare le immagini utilizzando .NET, senza perdere i dati EXIF? Sto bene con l'utilizzo di .NET 2 System.Drawing. * Classi, classi WPF o librerie open-source.Ridimensionare un'immagine con .NET senza perdere i dati EXIF ​​

L'unico modo semplice che ho trovato per gestire tutto questo per ora è utilizzare Graphics.FromImage (.NET 2) per eseguire il ridimensionamento e riscrivere manualmente i dati EXIF ​​con una libreria OpenSource (ogni pezzo di dati uno per uno).

+0

ho aggiunto un progetto su CodePlex, con il ridimensionamento senza perdere i dati EXIF: http://tidytinypics.codeplex.com/ – TigrouMeow

risposta

3

Il suggerimento di estrarre i dati EXIF ​​prima del ridimensionamento 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 un'immagine di questo tipo in un oggetto grafico per ridimensionare, si sta essenzialmente convertendo l'immagine in una normale bitmap. Quindi, si perdono i dati EXIF.

Filettatura leggermente correlata relativa all'estrazione EXIF ​​con C# here.

+0

Va bene ha mantenuto la mia soluzione quindi, funziona abbastanza bene, è solo un sacco di codice per niente ma è abbastanza veloce :) – TigrouMeow

+0

L'unica altra alternativa che conosco è ImageMagick - Capisco che tu possa fare le trasformazioni senza perdere i dati EXIF ​​ma quella libreria è essenzialmente facendo la stessa cosa che stai già facendo, solo probabilmente più veloce. –

2

Ho usato Magick .NET e ha 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; 
    } 
Problemi correlati