Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Скрипт для избирательного применения convert -resize [РЕШЕНО]  (Прочитано 1056 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн lion9

  • Автор темы
  • Участник
  • *
  • Сообщений: 163
    • Просмотр профиля
    • Веб-кирпичи
Можно ли сделать так, чтоб скрипт

#!/bin/bash
mkdir thumbs
for f in *.jpg; do
convert $f -resize 640x480 -quality 90% thumbs/${f%%JPG}
done

затрагивал только те файлы, которые имеют размеры больше 640x480? А то подгоняет даже те, которые меньше, увеличивая их размер.

Добавление символа >:

#!/bin/bash
mkdir thumbs
for f in *.jpg; do
convert $f -resize 640x480> -quality 90% thumbs/${f%%JPG}
done

Конвертит фото как надо, но в папке с исходными фотками появляется файл -quality с нулевым размером. Если убрать параметр -quality 90%, то фотки в папке thumbs тоже получаются нулевого размера. А -quality 90% вообще работает в данном скрипте. Где может быть ошибка?
« Последнее редактирование: 30 Октября 2010, 14:32:27 от lion9 »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Вопрос по команде convert
« Ответ #1 : 30 Октября 2010, 13:23:07 »
Цитировать
convert $f -resize 640x480> -quality 90% thumbs/${f%%JPG}
...
Конвертит фото как надо, но в папке с исходными фотками появляется файл -quality с нулевым размером.

Оффлайн lion9

  • Автор темы
  • Участник
  • *
  • Сообщений: 163
    • Просмотр профиля
    • Веб-кирпичи
Re: Вопрос по команде convert
« Ответ #2 : 30 Октября 2010, 13:25:47 »
Цитировать
convert $f -resize 640x480> -quality 90% thumbs/${f%%JPG}
...
Конвертит фото как надо, но в папке с исходными фотками появляется файл -quality с нулевым размером.


так этот знак > и нужен для того, чтобы выбирались только фотки бОльшего размера.

man convert:
....
  Use > to change the dimensions of the image only if its
          size exceeds the geometry specification.  < resizes the
          image only if its dimensions is less than the  geometry
          specification.   For  example,  if you specify 640x480>
          and the image size is 512×512, the image size does  not
          change.   However,  if  the  image  is 1024×1024, it is
          resized to 640×480....

В манах речь идёт о -geometry,  но внесение изменений:

#!/bin/bash
mkdir thumbs
for f in *.jpg; do
convert $f -geometry 640x480> -quality 90% thumbs/${f%%JPG}
done
оставляет те же проблемы. :(

« Последнее редактирование: 30 Октября 2010, 13:28:23 от lion9 »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Вопрос по команде convert
« Ответ #3 : 30 Октября 2010, 13:30:33 »
Цитировать
так этот знак > и нужен для того, чтобы выбирались только фотки бОльшего размера.
Экранирование символов в bash.

Оффлайн lion9

  • Автор темы
  • Участник
  • *
  • Сообщений: 163
    • Просмотр профиля
    • Веб-кирпичи
Re: Вопрос по команде convert
« Ответ #4 : 30 Октября 2010, 13:37:14 »
Теперь понятно...  Пока задача решена так:

#!/bin/bash
mkdir thumbs
for f in *.jpg; do
convert $f -resize 640x480 -quality 90% thumbs/${f%%JPG}
done

Копирование избирательно отрисайзеных фото из thumbs в начальный каталог с заменой исходных фоток + удаление пустого файла  -quality и каталога thumbs. Затем:

#!/bin/bash
mkdir thumbs
for f in *.jpg; do
convert $f -quality 90% thumbs/${f%%JPG}
done

Имеем папку thumbs с избирательно уменьшенными фотками и уменьшенным качеством. А есть ли возможность таки делать эту задачу одним скриптом?




Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Вопрос по команде convert
« Ответ #5 : 30 Октября 2010, 14:00:29 »
mkdir thumbs
find -maxdepth 1 -type f -iregex '.*\.jpg\|.*\.png' -exec convert -resize 640x480\> -quality 90 "{}" "thumbs/{}" \;
Как-то так.

Оффлайн lion9

  • Автор темы
  • Участник
  • *
  • Сообщений: 163
    • Просмотр профиля
    • Веб-кирпичи
Re: Вопрос по команде convert
« Ответ #6 : 30 Октября 2010, 14:24:29 »
Офигенно, как раз то, что надо. Спасибо огромное.

В таком виде скрипт тоже теперь корректно работает:

#!/bin/bash
mkdir thumbs
for f in *.jpg; do
convert $f -resize 640x480\> -quality 90% thumbs/${f%%JPG}
done
« Последнее редактирование: 30 Октября 2010, 14:28:57 от lion9 »

 

Страница сгенерирована за 0.015 секунд. Запросов: 19.