5

У меня есть очень большая коллекция очень больших изображений, и я хочу создать галерею миниатюр, в которой размеры изображений уменьшаются до максимальной минимальной ширины (вы поймете) 180 пикселей.

Например: если изображение имеет размер 2400x1800, оно будет изменено до 240x180, а если оно будет 1600x1800, оно будет изменено до 180x202

Это понятно? Наименьший размер изображения должен быть ровно 180, независимо от того, ширина это или высота.

Как это возможно с командной строкой? Я знаю, как изменить размер каждого файла до определенного размера, но не с такими разными размерами.

1 ответ1

5

Как насчет использования функции convert ImageMagick, которая имеет такой минимальный размер, см. Параметры геометрии изображения ?!

Скопируйте и вставьте фрагмент (синтаксис bash) - обратите внимание на ^ после спецификации размера:

for file in *.jpg; do
   echo -n Converting ${file}...
   convert -resize 180x180^ "$file" "th_$file"
   echo done
done

Кроме того, если вы хотите обрезать полученный файл до квадратичной формы вокруг центра, вы можете использовать этот скрипт. Параметр SIZE в первой строке указывает (сюрприз, сюрприз) окончательный размер эскиза.

SIZE=180
for file in *.jpg; do
   echo -n Converting ${file}...
   convert -resize ${SIZE}x${SIZE}^ "$file" temp.png
   convert -crop $(identify temp.png | awk -F'[ x]' -v SIZE=$SIZE '{ printf "%ux%u+%u+%u", SIZE, SIZE, ($3-SIZE)/2, ($4-SIZE)/2 }') temp.png "th_$file"
   echo done
done
rm temp.png

Скрипт не очень оптимизирован, так как он запускает две команды (identify и convert -crop) на миниатюре. Но так как миниатюра только маленькая, я думаю, что скорость разумная.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .