use strict;
use warnings;

# Maximale Bildgroesse
my $dest_size = '512';

# Text der Beschriftung
my $watermark_text = "Image by Netzmafia";

# Name des Verzeichnisses mit den Vorschaubildern
my $thumbdir = 'Thumbs';

# Pfade zu den Programmen
#my $convert = '/usr/bin/convert';
#my $composite = '/usr/bin/composite';
#my $identify = '/usr/bin/identify -format "%f: %wx%h\n" ./*.jpg';

# Fuer Windows
my $convert = 'convert';
my $composite = 'composite';
my $identify = 'identify -format "%f: %wx%h\n" ./*.jpg';

# Hier wird die Bildinformation gespeichert:
my %imageinfo = ();

# Hilfsvariablen
my ($cmd, $key, $arg);

# Thumbverzeichnis anlegen, falls nicht schon vorhanden
unless(-d "$thumbdir")
  { mkdir "$thumbdir" or die "Oops: $!\n"; }

# Beschriftung erzeugen
$cmd = "$convert " .
	"-size 380x70 " .
	"xc:transparent ".
	"-font Helvetica ".
	"-pointsize 32 ".
	"-draw \"text 15,50 '$watermark_text'\" ".
	"-channel RGBA ".
	"-gaussian 0x3 ".
	"-fill lightblue ".
	"-stroke black ".
	"-draw \"text 10,45 '$watermark_text'\" ".
	"$thumbdir/watermark.png";
system($cmd) and die "Oops: '$cmd' - $!\n";

# Bilder im Verzeichnis bearbeiten
# Dateiname, Breite, Hoehe speichern
open (IDENTIFY, "$identify |") || die "Oops: $!\n";
while (my $line = <IDENTIFY>)
  {
  chomp($line);
  if ($line ne "")
    {
    $line =~ /(.+): (.+)x(.+)/;
    $imageinfo{"$1"} = "$2,$3";
    }
  }
close (IDENTIFY);

# Nun werden die Thumbnails gebastelt
foreach $key (keys %imageinfo)
  {
  # Wenn Breite > Hoehe: Breite auf $dest_size skalieren
  # andernfalls die Hoehe skalieren ('x' vor die Groessenangabe)
	my ($w, $h) = split(",",$imageinfo{$key});
	$arg = ($w > $h)? '' : 'x';
  # die verkleinerten Bilder erzeugen
	$cmd = "$convert -resize $arg$dest_size $key $thumbdir/$key";
	system ($cmd) and die "Oops: '$cmd' - $!\n";
  # Schrift einbauen
	$cmd = "$composite -gravity SouthEast $thumbdir/watermark.png $thumbdir/$key $thumbdir/$key";
	system ($cmd) and die "Oops: '$cmd' - $!\n";
  }

# Beschreibung loeschen
unlink("$thumbdir/watermark.png") || die "Oops: $!";
