Как использовать плагин автоповорота в ImageResizer

Как использовать плагин AutoRotate в консольном приложении С#? Я думал, что смогу сделать что-то вроде settings.AutoRotate = true; например, я могу изменить режим подгонки, чтобы использовать плагин для вырезания швов.

Я пробовал settings.Add("autorotate","true") для набора ключей, а также другие имена ключей AutoRotate и autoRotate.

Я использую его в простой метод.

    new AutoRotate().Install(ImageResizer.Configuration.Config.Current);
    ...
    protected static Image ResizeImage(Image image, double scaleFactor)
    {
        var settings = new ResizeSettings
        {
            Scale = ScaleMode.Both,
            Width = (int)Math.Floor(Image.Width * scaleFactor),
            Height = (int)Math.Floor(Image.Height * scaleFactor),
            Mode = FitMode.None,
            Format = "png"
        };

        settings.Set("autorotate", "true");
        return ImageBuilder.Current.Build(image, settings, true);
    }

person MariaSnuggles    schedule 09.09.2013    source источник
comment
Вы установили его с помощью new AutoRotate().Install(Config.Current);?   -  person Lilith River    schedule 09.09.2013
comment
Где его установить? Просто в коде перед его использованием?   -  person MariaSnuggles    schedule 09.09.2013
comment
Да. Просто установите его только один раз — вы вызовете ошибки, если попытаетесь установить его несколько раз в один и тот же экземпляр конфигурации. (Config.Current распространяется на все приложение)   -  person Lilith River    schedule 09.09.2013
comment
Да, я только что попытался установить его, а затем добавил ключ autorotate со значением true с settings.Add("autorotate","true"), и он не повернул изображение автоматически.   -  person MariaSnuggles    schedule 09.09.2013
comment
Напрашивается вопрос, плагин для вырезания швов устанавливается автоматически? Я использовал его, и никаких исключений не было.   -  person MariaSnuggles    schedule 09.09.2013
comment
Я думаю, нам нужно увидеть весь ваш код — сделайте суть, если он больше нескольких строк.   -  person Lilith River    schedule 09.09.2013
comment
Предложение @ComputerLinguist решило для меня ту же проблему и работало со строками в нижнем регистре в settings.Add("autorotate","true").   -  person Guðmundur H    schedule 09.09.2013
comment
я обновил вопрос   -  person MariaSnuggles    schedule 09.09.2013


Ответы (1)


После долгих исследований я обнаружил ошибку, которую я совершаю, и обнаружил небольшую приятную «скрытую функцию» .Net!

Когда изображение считывается в объект Bitmap, метаданные стираются, поэтому, принимая объект изображения, данные об ориентации теряются, и автоповорот не срабатывает. Таким образом, передача имени файла изображения вместо изображения объект, и мой код выше работает!

Спасибо ребята!

person MariaSnuggles    schedule 10.09.2013
comment
Всегда позволяйте ImageResizer работать с именами файлов или потоками. Если вы передаете изображение или растровое изображение (внутри или снаружи), вы пропускаете важную работу по кодированию/декодированию изображения и можете вызвать утечку памяти. - person Lilith River; 10.09.2013