Поворот изображения с терминала
У меня есть каталог с большим количеством изображений, но они имеют неправильную ориентацию. Я хочу повернуть изображения для правильной ориентации (в основном ± 90o). С помощью средства просмотра изображений (снимок с фото) я могу поворачивать их по отдельности, нажимая кнопку поворота, но это слишком утомительно.
я смотрел на man shotwell
а также shotwell --help-all
но нет ничего, что объясняет, как вызвать команду rotate из командной строки.
Можно ли как-нибудь вызвать команду поворота Shotwell (или любого другого зрителя) из терминала? Или любые другие методы для поворота изображения тоже приветствуются.
9 ответов
Если вы ищете чистую реализацию bash, ImageMagick's convert
Команда это то, что вы ищете:
for szFile in /path/*.png
do
convert "$szFile" -rotate 90 /tmp/"$(basename "$szFile")" ;
done
Выше оставит существующие файлы нетронутыми и скопировать новые в /tmp
так что вы можете переместить или скопировать их в другое место или даже заменить существующие после преобразования и после проверки.
(и он будет работать на всех последних выпусках Ubuntu как стандартного программного обеспечения)
for file in *.JPG; do convert $file -rotate 90 rotated-$file; done
Это скопирует,повернет и переименует ваши файлы.
Если вы хотите оставить исходные файлы без изменений, этот метод может вам подойти...
Обратите внимание, что это чувствительно к регистру: если ваши файлы называются *.jpg, замените их на строчные (или *.png ...) соответственно.
Если вы хотите перезаписать на месте, mogrify
из набора ImageMagick, кажется, самый простой способ достичь этого:
# counterclockwise:
mogrify -rotate -90 *.jpg
# clockwise:
mogrify -rotate 90 *.jpg
Вот как я это делаю:
Установить gThumb
sudo apt-get install gthumb
Откройте nautilus и перейдите в каталог изображений. Щелкните правой кнопкой мыши по одному и выберите
Open with -> gthumb
,Под
view
выбор менюBrowser
или нажмите клавишу Esc. Откроется браузер каталога со всеми вашими изображениями.Нажмите Ctrl и выберите изображения, которые вы хотите повернуть, или выделите все из них с помощью Ctrl + A.
На панели инструментов выберите
Tools
а потомRotate Right
или жеRotate Left
в зависимости от ваших предпочтений.
Как насчет exiftran - преобразуйте изображения в формате JPEG с цифровой камеры
Я знаю, что это немного ограничивает (jpeg), но он автоматический (с использованием тега ориентации exif).
for photo in *.jpg
do exiftrans -ia $photo
done
Что касается Exiftran, это утилита командной строки для преобразования изображений в формате JPEG с цифровой камеры. Он может выполнять повороты без потерь, как jpegtran(1), но в отличие от jpegtran(1) он заботится о данных EXIF: он может автоматически поворачивать изображения, проверяя тег ориентации exif; он обновляет информацию exif, если это необходимо (размер изображения, ориентация); он также вращает миниатюру exif. Он может обрабатывать несколько изображений одновременно
Как отмечает krlmlr в своем ответе ,
jpegtran
(устанавливается на Ubuntu с
sudo apt install libjpeg-turbo-progs
) доступен для вращения без потерь, но поскольку он выводится на стандартный вывод, команда для его использования будет выглядеть примерно так:
$ for img in *.jpg; do jpegtran -rotate 90 -copy all $img > rotated-${img}; done
Эта команда возьмет каждый файл в текущем каталоге и создаст повернутую версию (90° по часовой стрелке) копию каждого файла с новым именем.
rotated-image-name.jpg
. Выключатель
-copy all
заключается в том, чтобы скопировать все метаданные в новый файл.
Для получения дополнительной информации см.
man jpegtran
.
Дополнительная информация, учитывая, что исходный вопрос касался Шотвелла: согласно документации Шотвелла, повороты Шотвелла и другие правки фактически не будут редактировать файлы на диске:
Shotwell — неразрушающий фоторедактор. Он не изменяет ваши оригинальные фотографии. То есть, если вы обрежете фотографию или настроите ее цвета, файл фотографии на диске останется нетронутым. Shotwell сохраняет ваши правки в базе данных и при необходимости применяет их на лету. Это означает, что вы можете отменить любые изменения, внесенные в фотографию.
Вы можете скопировать / вставить этот код и сохранить его как rotate.sh
#!/bin/bash -e
CUR_DIR=$(pwd)
cd $1
for file in *.jpg
do
convert $file -rotate 90 $file
done
cd $CUR_DIR
После сохранения этого файла запустите его из терминала, используя ./rotate.sh folder_containing_images
,
Хорошим решением является создание набора резервных копий (например, с префиксом backup-
), поверните исходные файлы, создав набор новых файлов (с префиксом, например, rotated-
), давая вам набор
img-1.png
backup-img-1.png
rotated-img-1.png
img-2.png
- ...и так далее
mv
/ cp
Утилиты [bash globbing] могут только добавлять префиксы, грязно их убирать (будет использоваться расширение параметров, например...)
rename
инструмент позволяет использовать s/before/after/
синтаксис замещения (из sed
инструмент), чтобы заменить этот префикс защиты и перезаписать исходные файлы, чтобы ваш общий процесс для данного набора картинок img-
{1..n} .png
было бы:
for imgf in img-*.png; do mv "$imgf" "backup-$imgf"; done
for imgf in backup-img-*.png; do convert "$imgf" -rotate 90 "rotated-$imgf"; done
Замечания:
- вы могли бы использовать
cp
скорее, чемmv
, но там лежат 2 копии оригинала (недостатком является то, что вы получаете объединение префиксов "rotated-backup-
... ") - вращение по часовой стрелке (
-rotate 270
получает вас на 90° против часовой стрелки) - чтобы отслеживать прогресс, добавьте
echo "Rotating ${imgf#backup-} ... ";
послеconvert
звонки (доdone
) для более компактной формы (например, набора пронумерованных файлов) используйте расширение некоторых параметров, например
echo "$(echo ${imgf#backup-img-} | cut -d\. -f 1)...";
вместо(Вы не можете удалить префикс и суффикс в одном расширении bash param, поэтому используйте
cut
)
Затем после проверки вы не перепутали, удалите картинки, переместив их обратно в оригинал
rename 's/^rotated-//;' rotated-*
rm backup-img-*
Если у вас естьffmpeg
и если ваши изображения пронумерованы последовательно, начиная с нуля с 6 цифр, вы можете вращать их с помощью
ffmpeg -pattern_type glob -i '*.jpg' -start_number 0 -vf "transpose=1" -qscale:v 5 %06d.jpg
цифра послеqscale:v
контролирует качество вывода, чем меньше, тем лучше.