#!/usr/bin/perl
# UCW Gallery: Generate published photos
-# (c) 2004--2012 Martin Mares <mj@ucw.cz>
+# (c) 2004--2014 Martin Mares <mj@ucw.cz>
use strict;
use warnings;
}
my $meta = { 'photo' => {} };
-for my $f (@$orig_list) {
- my $id = $f->{id};
+sub get_meta_basic($$$) {
+ my ($f, $m, $p) = @_;
my $rotate = $f->{orientation};
- my $xfrm = $f->{xfrm};
- print "$id: ";
- my $p = new Image::Magick;
- my $orig = File::Spec->rel2abs($f->{file}, $gal->get('OrigDir'));
- my ($orig_w, $orig_h, $orig_size, $orig_format) = $p->PingImage($orig) or die "Error reading $orig\n";
+ my ($orig_w, $orig_h, $orig_size, $orig_format) = $p->PingImage($f->{orig}) or die "Error reading " . $f->{orig} . "\n";
print "${orig_w}x${orig_h} ";
my ($w0, $h0) = ($rotate eq "l" || $rotate eq "r") ? ($orig_h, $orig_w) : ($orig_w, $orig_h);
$w = int($w + .5);
$h = int($h + .5);
- my $m = {
- 'o' => $rotate,
- 'xf' => $xfrm,
- 'w' => $w,
- 'h' => $h,
- };
- $meta->{photo}->{$id} = $m;
+ $m->{o} = $rotate;
+ $m->{xf} = $f->{xfrm};
+ $m->{w0} = $w0;
+ $m->{h0} = $h0;
+ $m->{w} = $w;
+ $m->{h} = $h;
+}
- my $om = $old_meta->{photo}->{$id};
- if ($om &&
- $om->{o} eq $m->{o} &&
- $om->{xf} eq $m->{xf} &&
- $om->{w} eq $m->{w} &&
- $om->{h} eq $m->{h}) {
- print "... uptodate\n";
- next;
- }
+sub generate_photo($$$) {
+ my ($f, $m, $p) = @_;
my $e;
- $e = $p->Read($orig) and die "Error reading $orig: $e";
+ $e = $p->Read($f->{orig}) and die "Error reading " . $f->{orig} . ": $e";
$p->Strip;
$p->SetAttribute(quality=>90);
+ my $xfrm = $m->{xf};
if ($xfrm =~ /s/) {
print "-> sharpen ";
$p->Sharpen(1);
$p->Normalize();
}
+ my $rotate = $m->{o};
my $rot = 0;
if ($rotate eq "l") { $rot = 270; }
elsif ($rotate eq "r") { $rot = 90; }
$p->Rotate(degrees=>$rot);
}
- if ($w != $w0 || $h != $h0) {
+ my ($w, $h) = ($m->{w}, $m->{h});
+ if ($w != $m->{w0} || $h != $m->{h0}) {
print "-> ${w}x${h} ";
$p->Resize(width=>$w, height=>$h);
}
- my $photo = $gal->photo_name($m, $id);
+ my $photo = $gal->photo_name($m, $f->{id});
my $tmp = "$photo.new";
$e = $p->Write($tmp) and die "Unable to write $tmp: $e";
rename $tmp, $photo or die "Cannot rename $tmp to $photo: $!\n";
+}
+
+for my $f (@$orig_list) {
+ my $id = $f->{id};
+ print "$id: ";
+
+ my $m = { };
+ $meta->{photo}->{$id} = $m;
+ $f->{orig} = File::Spec->rel2abs($f->{file}, $gal->get('OrigDir'));
+
+ my $p = new Image::Magick;
+ get_meta_basic($f, $m, $p);
+
+ my $om = $old_meta->{photo}->{$id};
+ if ($om &&
+ $om->{o} eq $m->{o} &&
+ $om->{xf} eq $m->{xf} &&
+ $om->{w} eq $m->{w} &&
+ $om->{h} eq $m->{h}) {
+ print "... uptodate\n";
+ next;
+ }
+ generate_photo($f, $m, $p);
print "... OK\n";
}
print "Writing meta-data\n";
$gal->write_meta($photo_meta, $meta);
+exit 0;