Началось все с желания одной командой генерировать html страничку с галереей изображений. При этом, чтобы создавались миниатюры, отображался размер и разрешение файлов.
Введение
Для создания и автоматизации работы скрипта нам потребуется проделать три шага:
Шаг 1. Создаем команду поиска изображений в определенной папке (каталоге)
Вначале идет команда определяющая каталог и записывающая его в переменную DIR (так же убирает «/» в конце пути к папке):
DIR=$1 ;
if [ -z "$1" ]; then "$DIR"=`pwd`;
else
TEMP=`pwd`;
cd "$DIR"; TEMP2=`pwd`;
cd "$TEMP";
DIR="$TEMP2";
echo "$TEMP2";
fi;
Теперь нам следует «причесать» расширения файлов в нижний регистр:
for i in "$DIR"/*.[Pp][Nn][Gg]; do
mv "$i" "${i/%.[Pp][Nn][Gg]/.png}";
done ;
for i in "$DIR"/*.[Jj][Pp][Gg]; do
mv "$i" "${i/%.[Jj][Pp][Gg]/.jpg}";
done ;
Следующий шаг – поиск файлов (определение формата файла), для того чтобы лишнее не добавлялось при генерировании превью:
for i in "$DIR"/* ; do
a=`file "$i"`;
if [[ $a =~ 'PNG' ]] ; then
echo "PNG!!! $a" ;
P=*.png ;
elif [[ $a =~ 'JPEG' ]] ; then
echo "JPEG!!! $a" ;
J=*.jpg ;
fi ;
done ;
Следующая часть кода позволяет нам погрузится в директорию с изображениями, дабы убрать из названий файлов пробелы и &, а также создать директории с превью:
(cd "$DIR" &&
for i in $P $J; do
mv "$i" `echo $i | tr ' ' '_'`;
done ;
for i in $P $J; do
mv "$i" `echo $i | tr '&' 'n'`;
done ) ;
mkdir "$DIR"/thumbs
Переменная DIRNAME распознает название папки, в которой лежат файлы, чтобы в последствии добавить название к страничке.
Переменная HTMLNAME содержит имя файла html. Можно добавить 000 в начале имени для расположения файла первым в списке (алфавитный порядок):
DIRNAME=$(cd "$DIR" && echo "${PWD##*/}") ;
HTMLNAME="$DIR"/000_folder.html ;
На данном этапе мы прописали скрипт поиска файлов изображений в конкретной папке (каталоге) и можем переходить к следующему шагу.
Шаг 2. Процесс сборки страницы в файл.
Сам процесс сборки html странички в файл (прописывается название, указывается путь к MiniGal Nano):
echo "<?php" > $HTMLNAME
echo "$dir_folder = "$DIRNAME";" >> $HTMLNAME
echo "include "/var/www/your-domain.com/script/mg_nano.php";" >> $HTMLNAME
echo "?>" >> $HTMLNAME
Кнопки перехода по страницам находятся теперь в MiniGal Nano, появляются автоматически в зависимости от количества картинок на страницу.
Шаг 3. Плюшки.
Данный шаг является скорее творческим, призванным для информативности и удобства пользователя. На этом этапе мы будем создавать превью, а также получать данные о размере и разрешении файлов изображений. На данном этапе происходит погружение в директорию, подставляются данные о файлах из поиска, что был выше, и запускается цикл генерирующий превью. Утилита exiv2 записывает в переменную разрешение картинки, программа du определяет размер, имя файла (в случае если оно более 21 символа, то происходит его «обрезание»), команда echo выводит название и размеры, просто как отладочную информацию, чтобы знать если что-то пойдет не так:
(cd "$DIR" &&
for img in $J $P ; do
chmod 644 $img
convert -auto-orient -resize '350x300' -quality 97% -strip $img thumbs/thumb_$img
echo "$img successfully resized";
done ) ;
Утилита convert, из пакета imagemagic, создает превью размером 350х300 пикселей и качеством 97%, а так же убирает exif данные и переворачивает изображение основываясь на этих данных (для фото, параметр -auto-orient).
В некоторых случаях его придется убрать, фотографии с некоторых фотоаппаратов переворачиваются дважды.
Вся остальная закомментированная часть – это прошлые куски, которые мне казались не очень удачными и были заменены. Так же там есть кусочек который создает превью для .gif файлов, но так и не был доделан.
Хотя сам по себе рабочий, но дополнительно нужно создавать временную директорию для правильного преобразования gif (параметр -coalesce).
Заключение.
Сам скрипт следует использовать по команде:
sh /путь к скрипту/script_002.sh /путь к папке с изображениями/
На этом все, пример работы скрипта, сам скрипт и css стиль для него можно найти ниже.
Адаптация и правка текста Александр "Lucky" Шадрин