#!/usr/bin/perl # Merge photos from multiple sources # (c) 2008 Martin Mares use Image::EXIF; use Data::Dumper; use strict; use warnings; my @pics = (); if (@ARGV) { @pics = @ARGV; } else { while () { chomp; /^#/ && next; /^$/ && next; push @pics, $_; } } my %seen = (); foreach my $f (@pics) { my $e = new Image::EXIF($f); my $i = $e->get_all_info(); if ($e->error) { print STDERR "EXIF error on $f: ", $e->error, "\n"; } else { #print STDERR Dumper($i), "\n"; my $o = $i->{'image'}->{'Image Orientation'} || "Top, Left-Hand"; if ($o eq "Top, Left-Hand") { $o = "."; } elsif ($o eq "Right-Hand, Top") { $o = "r"; } elsif ($o eq "Left-Hand, Bottom") { $o = "l"; } elsif ($o eq "Bottom, Right-Hand") { $o = "d"; } else { print STDERR "Unrecognized orientation: $o\n"; $o = "."; } my $d = $i->{'image'}->{'Image Created'}; if (defined($d)) { $d =~ s/^(\d{4}):(\d{2}):(\d{2}) (\d{2}):(\d{2}):(\d{2})/$1$2$3-$4$5$6/ or die "Date parse error: $d"; } else { print STDERR "Unrecognized data, skipping: $f\n"; next; } my $fn = $d; if ($f =~ m{^\.\./orig/(\w+)/}) { $fn = "$fn-$1"; } if (defined $seen{$fn}) { my $c = ++$seen{$fn}; $fn = "$fn-$c"; } else { $seen{$fn} = 1; } print "ln -s '$f' '$fn.jpg'\n"; } }