diff options
author | Nils <git@velohero.com> | 2016-11-06 12:40:01 +0100 |
---|---|---|
committer | Nils <git@velohero.com> | 2016-11-06 12:40:01 +0100 |
commit | 83560c97b635622897c5c801d3960579bfdf732f (patch) | |
tree | 92c3934efe6fdde3c23cc86c58f00b8f10012bb4 /gallery.sh | |
parent | e98190fb33371ff1a206010a94b94604d6435be5 (diff) |
first commit
Diffstat (limited to 'gallery.sh')
-rwxr-xr-x | gallery.sh | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/gallery.sh b/gallery.sh new file mode 100755 index 0000000..b655339 --- /dev/null +++ b/gallery.sh @@ -0,0 +1,256 @@ +#!/bin/bash + +# gallery.sh +# Author: Nils Knieling - https://github.com/Cyclenerd/gallery_shell +# Inspired by: Shapor Naghibzadeh - https://github.com/shapor/bashgal + +######################################################################################### +#### Configuration Section +######################################################################################### + +height_small=187 +height_large=768 +quality=85 +thumbdir=__thumbs +htmlfile=index.html +title="Gallery" +footer='Created with <a href="https://github.com/Cyclenerd/gallery_shell">gallery.sh</a>' + +# Use convert from ImageMagick +convert="convert" +# Use JHead for EXIF Information +exif="jhead" + +# Bootstrap (currently v3.3.7) +# Latest compiled and minified CSS +stylesheet="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" + +downloadicon='<span class="glyphicon glyphicon-floppy-save" aria-hidden="true"></span>' +movieicon='<span class="glyphicon glyphicon-film" aria-hidden="true"></span>' +homeicon='<span class="glyphicon glyphicon-home" aria-hidden="true"></span>' + +function debug { + return 0 # 0=enable, 1=disable debugging output +} + +######################################################################################### +#### End Configuration Section +######################################################################################### + + +me=$(basename "$0") +datetime=$(date -u "+%Y-%m-%d %H:%M:%S") +datetime+=" UTC" + +function usage { + echo "usage: $me [-t <title>] [-h]" + echo " [-t <title>] sets the title (default: $title)" + echo " [-h] displays help (this message)" +} + +while getopts ":t:h" opt; do + case $opt in + t) + title="$OPTARG" + ;; + h) + usage + exit 0 + ;; + \?) + echo "Invalid option: -$OPTARG" >&2 + exit 1 + ;; + esac +done + +debug && echo "- $me : $datetime" + +### Check Commands +command -v $convert >/dev/null 2>&1 || { echo >&2 "!!! $convert it's not installed. Aborting."; exit 1; } +command -v $exif >/dev/null 2>&1 || { echo >&2 "!!! $exif it's not installed. Aborting."; exit 1; } + +### Create Folders +[[ -d $thumbdir ]] || mkdir $thumbdir || exit 2 + +heights[0]=$height_small +heights[1]=$height_large +for res in ${heights[*]}; do + [[ -d $thumbdir/$res ]] || mkdir -p $thumbdir/$res || exit 3 +done + +#### Create Startpage +debug && echo "+" $htmlfile +cat > "$htmlfile" << EOF +<!DOCTYPE HTML> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>$title</title> + <meta name="viewport" content="width=device-width"> + <meta name="robots" content="noindex, nofollow"> + <link rel="stylesheet" href="$stylesheet"> +</head> +<body> +<div class="container"> + <div class="row"> + <div class="col-xs-12"> + <div class="page-header"><h1>$title</h1></div> + </div> + </div> +EOF + +### Photos (JPG) +if [[ $(ls -l | grep -i jpg | wc -l) -gt 0 ]]; then + +echo '<div class="row">' >> "$htmlfile" +## Generate Images +numfiles=0 +for filename in *.[jJ][pP][gG]; do + debug && echo -n "+ $filename: " + filelist[$numfiles]=$filename + let numfiles++ + for res in ${heights[*]}; do + debug && echo -n "$thumbdir/$res " + if [[ ! -s $thumbdir/$res/$filename ]]; then + $convert -auto-orient -strip -quality $quality -resize x$res "$filename" "$thumbdir/$res/$filename" + fi + done + debug && echo + cat >> "$htmlfile" << EOF +<div class="col-md-3 col-sm-12"> + <p> + <a href="$thumbdir/$filename.html"><img src="$thumbdir/$height_small/$filename" alt="" class="img-responsive"></a> + <div class="hidden-md hidden-lg"><hr></div> + </p> +</div> +EOF +[[ $(( $numfiles % 4 )) -eq 0 ]] && echo '<div class="clearfix visible-md visible-lg"></div>' >> "$htmlfile" +done +echo '</div>' >> "$htmlfile" + +## Generate the HTML Files for Images in thumbdir +file=0 +while [[ $file -lt $numfiles ]]; do + filename=${filelist[$file]} + prev= next= + [[ $file -ne 0 ]] && prev=${filelist[$((file - 1))]} + [[ $file -ne $((numfiles - 1)) ]] && next=${filelist[$((file + 1))]} + imagehtmlfile=$thumbdir/$filename.html + exifinfo=$($exif "$filename") + filesize=$(ls -lah "$filename" | awk '{ print $5}') + cat > "$imagehtmlfile" << EOF +<!DOCTYPE HTML> +<html lang="en"> +<head> +<meta charset="utf-8"> +<title>$filename</title> +<meta name="viewport" content="width=device-width"> +<meta name="robots" content="noindex, nofollow"> +<link rel="stylesheet" href="$stylesheet"> +</head> +<body> +<div class="container"> +<div class="row"> + <div class="col-xs-12"> + <div class="page-header"><h2><a href="../$htmlfile">$homeicon</a> <span class="text-muted">/</span> $filename</h2></div> + </div> +</div> +EOF + + # Pager + echo '<div class="row"><div class="col-xs-12"><nav><ul class="pager">' >> "$imagehtmlfile" + [[ $prev ]] && echo '<li class="previous"><a href="'$prev'.html"><span aria-hidden="true">←</span></a></li>' >> "$imagehtmlfile" + [[ $next ]] && echo '<li class="next"><a href="'$next'.html"><span aria-hidden="true">→</span></a></li>' >> "$imagehtmlfile" + echo '</ul></nav></div></div>' >> "$imagehtmlfile" + + cat >> "$imagehtmlfile" << EOF +<div class="row"> + <div class="col-xs-12"> + <p><img src="$height_large/$filename" class="img-responsive" alt=""></p> + </div> +</div> +<div class="row"> + <div class="col-xs-12"> + <p><a class="btn btn-info btn-lg" href="../$filename">$downloadicon Download Original Image File ($filesize)</a></p> + </div> +</div> +EOF + + # EXIF + if [[ $exifinfo ]]; then + cat >> "$imagehtmlfile" << EOF +<div class="row"> +<div class="col-xs-12"> +<pre> +$exifinfo +</pre> +</div> +</div> +EOF + fi + + # Footer + cat >> "$imagehtmlfile" << EOF +</div> +</body> +</html> +EOF + let file++ +done + +fi + +### Movies (MOV) +if [[ $(ls -l | grep -i mov | wc -l) -gt 0 ]]; then + cat >> "$htmlfile" << EOF + <div class="row"> + <div class="col-xs-12"> + <div class="page-header"><h2>Movies</h2></div> + </div> + </div> + <div class="row"> + <div class="col-xs-12"> +EOF + for filename in *.[mM][oO][vV]; do + filesize=$(ls -lah $filename | awk '{ print $5}') + cat >> "$htmlfile" << EOF +<a href="$filename" class="btn btn-primary" role="button">$movieicon $filename ($filesize)</a> +EOF + done + echo '</div></div>' >> "$htmlfile" +fi + +### Downloads (ZIP) +if [[ $(ls -l | grep -i zip | wc -l) -gt 0 ]]; then + cat >> "$htmlfile" << EOF + <div class="row"> + <div class="col-xs-12"> + <div class="page-header"><h2>Downloads</h2></div> + </div> + </div> + <div class="row"> + <div class="col-xs-12"> +EOF + for filename in *.[zZ][iI][pP]; do + filesize=$(ls -lah $filename | awk '{ print $5}') + cat >> "$htmlfile" << EOF +<a href="$filename" class="btn btn-primary" role="button">$downloadicon $filename ($filesize)</a> +EOF + done + echo '</div></div>' >> "$htmlfile" +fi + +### Footer +cat >> "$htmlfile" << EOF +<hr> +<footer> + <p>$footer</p> + <p class="text-muted">$datetime</p> +</footer> +</div> <!-- // container --> +</body> +</html> +EOF + +debug && echo "= done :-)"
\ No newline at end of file |