Скрипт генерирующий php галерею с миниатюрами (за основу взята MiniGal Nano).

Началось все с желания одной командой генерировать html страничку с галереей изображений. При этом, чтобы создавались миниатюры, отображался размер и разрешение файлов.


Введение


Для создания и автоматизации работы скрипта нам потребуется проделать три шага:

  • 1. Поиск изображений
  • 2. Процесс сборки html страницы в файл
  • 3. Создание превью, а также получение данных о размере и разрешении

Шаг 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 стиль для него можно найти ниже.


Страница пример


Скрипт (.sh)



Стиль css



MiniGal Nano (.php)



MiniGal Nano config (.php)



Template (.html)



Адаптация и правка текста Александр "Lucky" Шадрин