Изменение размера изображения с помощью .NET без потери данных EXIF - PullRequest
5 голосов
/ 05 августа 2009

Каков наилучший способ изменить размеры изображений с помощью .NET, не теряя данные EXIF? Я в порядке с использованием классов .NET 2 System.Drawing. *, Классов WPF или библиотек с открытым исходным кодом.

Единственный простой способ, который я нашел для обработки всего этого на данный момент, - это использовать Graphics.FromImage (.NET 2) для выполнения изменения размера и перезаписи EXIF-данных вручную с помощью библиотеки OpenSource (каждый фрагмент данных один по одному).

Ответы [ 2 ]

3 голосов
/ 05 августа 2009

Ваше предложение извлечь данные EXIF ​​перед изменением размера, а затем повторно вставить данные EXIF, кажется неплохим решением.

Данные EXIF ​​могут быть определены только для таких форматов, как JPEG и TIFF - когда вы загружаете такое изображение в графический объект для изменения размера, вы по существу конвертируете изображение в обычный растровый рисунок. Следовательно, вы теряете данные EXIF.

Слегка связанная тема о извлечении EXIF ​​с использованием C # здесь .

2 голосов
/ 03 ноября 2014

Я использовал 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;
    }
...