summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Pritz <bluewind@xssn.at>2010-11-29 17:17:03 +0100
committerFlorian Pritz <bluewind@xssn.at>2010-11-29 17:17:03 +0100
commit46d3b5eb00f5ad4541f10597c0188dd7ad9b0d20 (patch)
treeee8b9aebea0648ba5cbadbb664a7b9c51ab9ef7b
parent99084b5f6e18f8c9d606411192b72832abb84749 (diff)
downloadgenerate_gallery-46d3b5eb00f5ad4541f10597c0188dd7ad9b0d20.tar.gz
generate_gallery-46d3b5eb00f5ad4541f10597c0188dd7ad9b0d20.tar.xz
rewrite in perl for speed
Signed-off-by: Florian Pritz <bluewind@xssn.at>
-rwxr-xr-xgenerate_gallery.pl61
-rwxr-xr-xgenerate_gallery.sh54
2 files changed, 61 insertions, 54 deletions
diff --git a/generate_gallery.pl b/generate_gallery.pl
new file mode 100755
index 0000000..64c9d6b
--- /dev/null
+++ b/generate_gallery.pl
@@ -0,0 +1,61 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+use Image::ExifTool qw(ImageInfo);
+use File::Basename;
+use Cwd qw(cwd abs_path);
+use File::MimeInfo qw(mimetype);
+use Image::Magick;
+
+if (@ARGV == 0) {
+ print "usage: ".basename($0)." <directory>...";
+ exit 0;
+}
+
+my $templatedir = abs_path(dirname($0))."/generate_gallery.d";
+
+my $startdir = cwd();
+
+for my $dir (@ARGV) {
+ chdir $startdir;
+ unless (-d $dir) {
+ print "Argument is not a directory: $dir. Ignoring.\n";
+ next;
+ }
+ my $abs_dir = abs_path $dir;
+ chdir $abs_dir;
+ mkdir "thumbs" unless -d "thumbs";
+ my $html;
+
+ for my $file (glob("*")) {
+ unless (mimetype($file) =~ /^image\/.*/) {
+ print "ignoring non-image: $dir/$file\n";
+ next;
+ }
+
+ unless ( -e "$abs_dir/thumbs/$file") {
+ print "processing $dir/$file ...\n";
+ my $img = new Image::Magick;
+ $img->Read("$abs_dir/$file");
+ $img->Thumbnail(geometry=>"200x200");
+ $img->Write("$abs_dir/thumbs/$file");
+ }
+ $html .= "<div class=\"thumbnail\">\n";
+ my $tags = ImageInfo($file, "Aperture", "ShutterSpeed", "FocalLength");
+ $html .= "<a rel=\"images\" class=\"thumbnail\" title=\"".$tags->{ShutterSpeed}.", ".$tags->{FocalLength}." @ F ".$tags->{Aperture}."\" href=\"$file\">\n";
+ $html .= "<img class=\"thumbnail\" alt=\"\" src=\"thumbs/$file\" />\n";
+ $html .= "</a>\n</div>\n";
+ }
+ open TEMPLATE, "<", "$templatedir/template.html";
+ open OUTPUT, ">", "$abs_dir/index.html";
+ while (<TEMPLATE>) {
+ if (/%%CONTENT%%/) {
+ print OUTPUT $html;
+ } else {
+ print OUTPUT $_;
+ }
+ }
+ close TEMPLATE;
+ close OUTPUT;
+ system "cp", "-r", "$templatedir/fancybox", ".";
+}
diff --git a/generate_gallery.sh b/generate_gallery.sh
deleted file mode 100755
index 6efed92..0000000
--- a/generate_gallery.sh
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/bash
-#----------------------------------------------------
-# Version: 0.3.0
-# Author: Florian "Bluewind" Pritz <flo@xssn.at>
-#
-# Licensed under WTFPL v2
-# (see COPYING for full license text)
-#
-#----------------------------------------------------
-# put images in folder "foo" and run "$0 foo"
-#----------------------------------------------------
-
-startdir="$PWD"
-datadir="$(dirname "$0")/generate_gallery.d"
-
-html_template="$datadir/template.html"
-
-tempfile=$(mktemp "/tmp/image-gallery.XXXXXX")
-
-for i in "$@"; do
- pushd "$i" &>/dev/null
- echo > $tempfile
- for img in *; do
- filename="$(basename "$img")"
- pushd "$(dirname "$img")" &>/dev/null
- mkdir -p thumbs
- if file -b --mime-type "$img" | grep -q "image/.*"; then
- if [ ! -e "thumbs/$filename" ]; then
- echo "processing: $i/$img"
- convert "$filename" -thumbnail 200x200 "thumbs/$filename"
- fi
- fnumber=$(exiftool -s -s -s -FNumber $filename)
- focallength=$(exiftool -s -s -s -FocalLength $filename)
- shutterspeed=$(exiftool -s -s -s -ShutterSpeed $filename)
- echo "<div class=\"thumbnail\">" \
- "<a rel=\"images\" class=\"thumbnail\" title=\"${shutterspeed}s, $focallength @ F $fnumber\" href=\"$img\">" \
- "<img class=\"thumbnail\" alt=\"\" src=\"thumbs/$img\" />" \
- "</a>" \
- "</div>" | sed -r 's/\/\//\//g' >> $tempfile
- else
- echo "ignoring non-image: $i/$img"
- fi
- popd &>/dev/null
- done
- cd "$startdir"
- sed -r \
- -e "/%%CONTENT%%/r $tempfile" \
- -e '/%%CONTENT/d' \
- "$html_template" > "$i/index.html"
- cp -r "$datadir/fancybox" "$i"
- popd &>/dev/null
-done
-
-rm $tempfile