указать определенный тип файла для ImageMagic (нестандартная ситуация)

Работа с различными видами графики, изображений, решение проблем

Модератор: Модераторы разделов

San4
Сообщения: 7
ОС: linux

указать определенный тип файла для ImageMagic

Сообщение San4 »

Нужно с помощью ImageMagic сделать пакетный ресайз картинок

Код: Выделить всё

mogrify -resize 800x600 *.jpg

Но проблема в том, что картинки лежат в одной папке, вперемешку с различными другими типами файлов (pdf, txt, gif, и т.п). И все эти файлы (включая jpeg-кртинки) представлены просто в виде названий и не имеют расширений.

Как указать ImageMagic'ку, что нужно ресайзить только jpeg -файлы?

Погуглил и нашел, что можно указать имейдж-маджику нужные файлы с помощью команды «find» вот пример:

Код: Выделить всё

find folder/ -name '*.jpg' -exec mogrify -resize 800x600 -quality 75 {} \;

(здесь идет поиск всех файлов с расширением jpg и передача их на обработку в ImageMagic )

Но мне она получается, не подходит, т.к у меня у всех файлов расширения отсутствуют , да и смысл немного не тот.

но по аналогии, я тогда вспомнил еще про команду «file», которая определяет тип файла по его содержимому.

А можно ли, как-то сделать так, чтобы с помощью команды «file» определились все jpeg-файлы и потом они передались на обработку в ImageMagic?
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: указать определенный тип файла для ImageMagic

Сообщение Bizdelnick »

Список jpeg-файлов можно получить так: file --mime-type * | grep 'image/jpeg$' | cut -d: -f1 (при условии, что в именах файлов нет двоеточий и ещё более внезапных символов). Этот список можно передать mogrify аргументом: mogrify -resize 800x600 `file --mime-type * | grep 'image/jpeg$' | cut -d: -f1` (если, опять-таки, в именах файлов нет внезапных символов типа пробелов).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

San4
Сообщения: 7
ОС: linux

Re: указать определенный тип файла для ImageMagic

Сообщение San4 »

Bizdelnick. Супер! Спасибо! Все работает. :good:
А еще… интересно, можно ли дополнительную команду сюда же «прикрутить» , чтобы ресайзу подвергались изображения, например, с разрешением только более 1400 pix. по ширине. Или, суть таже, но вместо «фильтра» по пикселям — был фильтр по размеру (например :делать ресайз картинок только с размером более 1 мб) :blush:
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: указать определенный тип файла для ImageMagic

Сообщение Bizdelnick »

San4 писал(а):
29.03.2016 21:59
можно ли

Можно. ☺
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

San4
Сообщения: 7
ОС: linux

Re: указать определенный тип файла для ImageMagic

Сообщение San4 »

Bizdelnick писал(а):
29.03.2016 22:15
Можно. ☺
если не сложно, подскажите, пожалуйста. ("фильтр" по разрешению)
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: указать определенный тип файла для ImageMagic

Сообщение NickLion »

Для получения разрешения можно исопльзовать identify из ImageMagick. Для фильтра можно использовать, например, perl:
identify * | perl -e 'while(<>){$_=~/^([^\s]+)\s\w+\s(\d+)x(\d+).*$/; print "$1\n" if $2 > 1400 && $3 > 1400}'
Спасибо сказали:

San4
Сообщения: 7
ОС: linux

Re: указать определенный тип файла для ImageMagic

Сообщение San4 »

NickLion писал(а):
29.03.2016 23:45
Для получения разрешения можно исопльзовать identify из ImageMagick. Для фильтра можно использовать, например, perl:
ого! :swoon: только как эту инопланетную письменность :) мне прикрутить к предыдущей команде... :wacko:
но благо,я еще нагуглил, вот что:
-resize 1000x1000\> - изменяем размер изображения до 1000х1000, но только в том случае если изображение больше этих размеров. Мелкие изображения остануться без изменения

получается, что я могу для себя немного изменить условия задачи (сделать ресайз всех больших картинок на 1400pix) и таким образом, сильно упростить команду: mogrify -verbose -resize 1400\> `file --mime-type * | grep 'image/jpeg$' | cut -d: -f1`
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: указать определенный тип файла для ImageMagic

Сообщение NickLion »

San4
Прикрутить просто подставив в `...` вместо исходной команды, которая возвращала список файлов. Но вариант с \>, пожалуй, будет быстрее.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: указать определенный тип файла для ImageMagic

Сообщение Bizdelnick »

Если использовать perl, то более рациональный способ — заюзать модуль Image::Magick (ну и File::Mimeinfo заодно).
В любом случае, на шелле или на перле, я бы не стал пытаться уместить всё это в однострок, а написал нормальный скрипт.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: указать определенный тип файла для ImageMagic

Сообщение NickLion »

Да, конечно, если это более, чем однократная операция, то лучше написать скрипт нормальный.
Спасибо сказали: