Измените размер изображения с помощью .NET без потери данных EXIF.

StackOverflow https://stackoverflow.com/questions/1230728

  •  22-07-2019
  •  | 
  •  

Вопрос

Как лучше всего изменить размер изображений с помощью .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;
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top