Измените размер изображения с помощью .NET без потери данных EXIF.
Вопрос
Как лучше всего изменить размер изображений с помощью .NET без потери данных EXIF?Меня устраивает использование классов .NET 2 System.Drawing.*, классов WPF или библиотек с открытым исходным кодом.
Единственный простой способ справиться со всем этим на данный момент — использовать Graphics.FromImage (.NET 2) для изменения размера и перезаписать данные EXIF с помощью библиотеки OpenSource вручную (каждый фрагмент данных один за другим). .
Решение
Ваше предложение извлечь данные EXIF перед изменением размера, а затем повторно вставить данные EXIF, кажется достойным решением.
Данные EXIF могут быть определены только для таких форматов, как JPEG и TIFF — когда вы загружаете такое изображение в объект Graphics для изменения размера, вы по сути преобразуете изображение в обычное растровое изображение.Следовательно, вы потеряете данные EXIF.
Слегка связанная тема об извлечении EXIF с использованием C # здесь.
Другие советы
Я использовал Magick .NET и создал 2 метода расширения:
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;
}