use strict;
use Carp;
-use POSIX qw/getcwd/;
-use CGI qw/:html *table *center *div/;
+use POSIX qw/getcwd strftime/;
+use CGI qw/:html *table *Tr *center *div/;
use Image::Info qw/image_info dim/;
use Term::ReadLine;
use Getopt::Long;
}
return 0;
}
+
+ tryapp12($info) unless ($info->{'ExifVersion'});
+
$self->{-isimg} = 1;
$self->{-info} = $info;
return 1;
}
+sub tryapp12 {
+ my $info = shift; # this is not a method
+ my $app12;
+ # dirty hack to take care of Image::Info parser strangeness
+ foreach my $k(keys %$info) {
+ $app12=substr($k,6).$info->{$k} if ($k =~ /^App12-/);
+ }
+ return unless ($app12); # bad luck
+ my $seenfirstline=0;
+ foreach my $ln(split /[\r\n]+/,$app12) {
+ $ln =~ s/[[:^print:]\000]/ /g;
+ unless ($seenfirstline) {
+ $seenfirstline=1;
+ $info->{'Make'}=$ln;
+ next;
+ }
+ my ($k,$v)=split /=/,$ln,2;
+ if ($k eq 'TimeDate') {
+ $info->{'DateTime'} =
+ strftime("%Y:%m:%d %H:%M:%S", localtime($v))
+ unless ($v < 0);
+ } elsif ($k eq 'Shutter') {
+ $info->{'ExposureTime'} = '1/'.int(1000000/$v+.5);
+ } elsif ($k eq 'Flash') {
+ $info->{'Flash'} = $v?'Flash fired':'Flash did not fire';
+ } elsif ($k eq 'Type') {
+ $info->{'Model'} = $v;
+ } elsif ($k eq 'Version') {
+ $info->{'Software'} = $v;
+ } elsif ($k eq 'Fnumber') {
+ $info->{'FNumber'} = $v;
+ }
+ }
+}
+
sub initdir {
my $self = shift;
my $fullpath = $self->{-fullpath};
# slideshow
for my $refresh('static', 'slide') {
my $fn = sprintf("%s/.html/%s-%s.html",$dn,$name,$refresh);
- my $imgsrc = sprintf("../.%s/%s",$sizes[1],$name);
+ my $imgsrc = '../'.$self->{$sizes[1]};
my $fwdref;
my $bakref;
if ($nref) {
),"\n";
}
print $F start_center,"\n",
- h1($title),
- a({-href=>"../index.html"},"Index")," | ",
- a({-href=>$bakref},"<<Prev")," | ",
- a({-href=>$toggleref},$toggletext)," | ",
- a({-href=>$fwdref},"Next>>"),
- p,
- img({-src=>$imgsrc}),"\n",
+ h1($title),"\n",
+ start_table({-class=>'navi'}),start_Tr,"\n",
+ td(a({-href=>"../index.html"},"Index")),"\n",
+ td(a({-href=>$bakref},"<<Prev")),"\n",
+ td(a({-href=>$toggleref},$toggletext)),"\n",
+ td(a({-href=>$fwdref},"Next>>")),"\n",
+ end_Tr,
+ end_table,"\n",
+ table({-class=>'picframe'},
+ Tr(td(img({-src=>$imgsrc})))),"\n",
end_center,"\n",
end_html,"\n";
close($F);
# info html
my $imgsrc = sprintf("../.%s/%s",$sizes[0],$name);
- print $F start_html(-title=>$title,-bgcolor=>"#ffff80",
+ print $F start_html(-title=>$title,
-style=>{-src=>$inc."gallery.css"},),"\n",
start_center,"\n",
h1($title),"\n",
- table(Tr(td(img({-src=>$imgsrc})),td($self->infotable))),
- end_table,
+ table({-class=>'ipage'},Tr(td(img({-src=>$imgsrc})),td($self->infotable))),
+ a({-href=>'../index.html'},'Index'),"\n",
end_center,"\n",
end_html,"\n";
close($F);
my ($w, $h) = dim($info);
print $IND start_div({-class=>'ibox',-id=>$name,
- -OnClick=>"HideIbox('$name');"}),
+ -OnClick=>"HideIbox('$name');"}),"\n",
+ start_div({-class=>'iboxtitle'}),
span({-style=>'float: left;'},b("Info for $name")),
span({-style=>'float: right;'},
a({-href=>"#",-OnClick=>"HideIbox('$name');"},"Close")),
- br({-clear=>'all'}),
+ br({-clear=>'all'}),"\n",
+ end_div,"\n",
$self->infotable,
end_div,"\n";
print $IND table({-class=>'slide'},Tr(td(
- a({-href=>".html/$name-info.html",
+ a({-href=>".html/$name-info.html",-title=>'Image Info',
-onClick=>"return showIbox('$name');"},$title),
br,
a({-href=>$medium,-rel=>"lightbox",-title=>$title},
img({-src=>$thumb})),
br,
- a({-href=>$name},"($w x $h)"),
+ a({-href=>$name,-title=>'Original Image'},"($w x $h)"),
br))),"\n";
}
'Model',
'Software',
);
- $msg.=start_table."\n";
+ $msg.=start_table({-class=>'infotable'})."\n";
foreach my $k(@infokeys) {
$msg.=Tr(td($k.":"),td($info->{$k}))."\n" if ($info->{$k});
}