Стандартное приложение для автоматического поворота изображений на основе EXIF

9434
Tschareck

Есть несколько приложений, которые я установил почти на каждом компьютере с Windows 7. Это такие приложения, как:

  • Галерея Windows Live (Windows Live Essentials)
  • Picasa
  • все, что выходит из коробки с Windows 7

Какое из этих приложений может вращать в пакетном режиме все изображения в одной папке на основе информации EXIF ?

Я знаю, что есть много приложений, которые могут делать именно это, но делает ли это любое из стандартных приложений? Иногда я не могу установить что-то новое, и я использую несколько разных компьютеров в разных местах.

Позвольте мне повторить - я хочу поворачивать изображения на основе информации EXIF, а не ВСЕХ из них.

6

5 ответов на вопрос

8
jdh

В Windows 7 по умолчанию установлен PowerShell, который можно использовать для редактирования сценариев через WIA (Windows Image Aquisition) или системный чертежный объект .Net. Вот быстрый скрипт powershell, использующий метод .Net для поворота всех jpg, найденных в текущем каталоге, на 90 градусов по часовой стрелке.

[System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") dir *.jpg | ForEach-Object { $image = [System.Drawing.image]::FromFile( $_ ) $image.rotateflip("Rotate90FlipNone") $image.save($_) } 

Поворот ограничен шагом в 90 градусов, включая ориентацию переворачивания изображения.

Это прекрасно работает, но в нем отсутствует одна важная деталь из вопроса: поворот изображения в правильную ориентацию на основе метаданных EXIF. iglvzx 12 лет назад 0
Если операция поворота основана на требовании, чтобы на камере был доступен датчик ориентации и чтобы на всех изображениях было установлено поле ориентации EXIF, вы можете использовать библиотеку WIA для проверки этого атрибута. Вот как проверить, существует ли он и его значение: if ($ imageWIA.Properties.Exists ("274")) {$ imageWIA.Properties.Item ("274"). Значение} Где значения: $ direction = @ { 1 = "Горизонтально"; 3 = «Поворот на 180 градусов»; 6 = «Поворот на 90 градусов по часовой стрелке»; 8 = "Повернуть на 270 градусов по часовой стрелке"} Также необходимо загрузить ссылку WIA и изображение в WIA. jdh 12 лет назад 0
3
George

Я почти уверен, что нет способа вращать изображения на основе информации EXIF, используя только стандартные приложения, которые поставляются с Windows. Однако я подумал, что в интересах других, у которых могут быть менее строгие требования, я упомянул 2 других способа.

Я бы порекомендовал XNView: http://www.xnview.com/en/xnview/ (не XNViewMP) для поворота без потерь в формате JPEG (если вы в порядке с возможной потерей нескольких пикселей по краям, поскольку это присущее ограничение без потерь в формате JPEG операции): XNView

Если вы не согласны с потерей каких-либо пикселей по краям и / или хотите сохранить результаты в другом формате, или хотите выполнять дополнительные манипуляции интуитивно понятным способом (пакетная обработка XNView довольно трудна для использования IMHO), я рекомендую Пакетную обработку Image Resizer, который является платным приложением: http://www.binarymark.com/products/batchimageresizer/default.aspx Batch Image Resizer

РЕДАКТИРОВАТЬ: Новая версия Batch Image Resizer поддерживает автоматический поворот изображения на основе распознавания лиц . Он может обнаружить человеческие лица на ваших фотографиях и автоматически поворачивать изображения соответственно. Это может быть полезно, например, если отсутствуют теги ориентации EXIF ​​и у вас есть 100 изображений, которые нужно повернуть:

Face-based auto-rotation

Отказ от ответственности: я использую обе программы ежедневно: XNView для просмотра / организации изображений, Batch Image Resizer для массовой обработки изображений.

2
JamesThomasMoon1979

jhead + jpegtrans

Используйте jhead (который требует jpegtran для автоматического поворота функции).

Из оболочки Windows,

jhead.exe -autorot image.JPG 

Для набора картинок в каталоге, используйте «оболочку», например

jhead.exe -autorot pics\*.JPG` 

jhead не будет изменять файлы, которые не нуждаются в ротации.


Дополнительно

Убедитесь, что jheadtran.exeв окружающей среде PATH, например PATH=%PATH%;C:\Path\to\jpegtran.

Я предлагаю -ftфлаг " Установить время модификации файла в Exif time ".

1
user881208

Перейдите в каталог, где находятся все ваши фотографии. Перейдите в подробный вид. Щелкните правой кнопкой мыши по одному столбцу и нажмите «Подробнее». Отметьте соответствующую деталь EXIF ​​и ОК. Теперь отфильтруйте все файлы на основе этой детали EXIF ​​и, наконец, выберите все фотографии, щелкнув правой кнопкой мыши по часовой стрелке или против часовой стрелки.

По состоянию на 2018 год это должен быть выбранный ответ. mins 6 лет назад 0
-1
leeand00

Для поворота jpg-файла из csv-файла использовалось следующее:

function batchRotateFromCSV([Parameter(Mandatory=$True)] $csvFile) { [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")  $imageFormat = "System.Drawing.Imaging.ImageFormat" -as [type]  Import-Csv $csvFile | Select PathToImage | ForEach { $image = [System.Drawing.image]::FromFile($_.PortraitFile) $image.RotateFlip([System.Drawing.RotateFlipType]::Rotate90FlipNone) $image.save($_.PathToImage, $imageFormat::jpeg) } } 

Конечно, вы можете изменить формат файла изображения.

Обратите внимание, что PathToImageэто будет имя заголовка в вашем CSV.

Перед ответом внимательно прочитайте вопрос traveh 7 лет назад 0
@traveh Можете ли вы заглянуть в историю, чтобы убедиться, что операция не изменила вопрос, так как я ответил на это? leeand00 7 лет назад 0
Да, я действительно сделал. Он не Он подчеркивал и повторял это для людей, которые не удосужились прочитать вопрос правильно, но он ничего не изменил. traveh 7 лет назад 0