"Mr. Shawn H. Corey" <[EMAIL PROTECTED]> writes:

>   use Data::Dumper;
>   print Dumper $self;

Thanks for the pointers... I haven't read it all yet but still trying
to get this script to run.  It is inlined at the end.

Introducing your code causes a new failure and nothing is printed.

[What I'm asking here is quite a lot so if you want to just tell me to
bug off, that would be taken in stride, and understood]

============
errors before:
  Use of uninitialized value in split at ./gen_images line 39.
Output path is '/var/www/locahost/htdocs/photo/data/'
Use of uninitialized value in open at lib/Database.pm line 216.
Use of uninitialized value in concatenation (.) or string at lib/Database.pm 
line 216.
Cannot read database : No such file or directory at lib/Database.pm
line 216.
===========
===========
errors after introducing the dump:

I inserted:
   use Data::Dumper;
   print Dumper $self;
   exit; 

Global symbol "$self" requires explicit package name at ./gen_images line 32.
Execution of ./gen_images aborted due to compilation errors.
===========

I'm not making any sense of this.

The error at 216 lib/Database.pm involves still more of the OOP
heirogliphics,  Leaving that alone for now.  I'd like to just find out
what is supposed to be getting passed into this script.

I'll post only one of the two cfg files being read and you'll see it
has very little in it.  The documentation with this script appears to
be out of sync with actual script so hasn't been much help.  I suspect
my problem revolve around miss placing parts of the package.  I'm
hoping if I can just get an idea what is supposed to be getting read
in and shifted off, I can piece together where things are supposed to be.

First the script, followed by one of two cfg files.
=============================
./gen_images

#!/usr/bin/perl -w

# This script generates the differently sized images for the ShowArt gallery.
# It needs ImageMagick installed.

# See art/cfg/gen_images.cfg for options and settings.

##############################################################################
# Nothing more needs to be changed below.

# This should really use Getopt::Long...

use lib 'lib';
use strict;
use File::Spec;
use File::Find;
use Database;           # the database support
use ArtShow::Config;  
use English;

my $VERSION = '0.14';

BEGIN
  {
  $|++;                 # output buffer off
  }

my $cfg = ArtShow::Config->new("art/cfg/gen_images.cfg");
my $art_cfg = ArtShow::Config->new("art/cfg/artshow.cfg");

my $first = shift || 1; # first ID to generate
my $last = shift || 0;  # last ID to generate
   
my $sizes = shift || $cfg->{sizes}->[0];
my $output = shift || $cfg->{output_dir}->[0];
my $org_dir = $cfg->{org_dir}->[0];
my $print = shift || 0;

my @sizes = split (/\s*,\s*/ , $sizes);

print "Output path is '$output'\n";
# read the database
my $db = Database->new( {
  file => $cfg->{database}->[0],
 } );

my $id = $db->first() || 0;             # set iterator to first item

while ($id != $first)
  { 
  $id = $db->next();
  die ("ID $first is not in the database") if !defined $id;
  } 

print "Running as user $UID, group $GID\n";
 
while (defined $id)
  {
 
  # find the proper input file
  my $item = $db->item($id); my $name = $item->[2];
  $name .= '.jpg' unless $name =~ /\.(tif|jpg|png)$/;

  my $f = File::Spec->catfile ($org_dir, $id, $name);

  if (!-f $f)
    {
    `./copy_org`;
    }

  print "Extracting EXIF for image ID $id from:\n '$f'\n";
  my $image_exif = $f; $image_exif =~ s/\.(png|tif)$/.jpg/;

  # extract EXIF data
  my $exif_file = "$art_cfg->{exif_dir}->[0]/$id.txt";
  `./exif "$image_exif" $exif_file`;

  print "$id: ";
  my $qs = { 
             1280 => 90, 
             1024 => 77, 800 => 76, 640 => 75, 480 => 74, 320 => 73,
             240 => 70, 200 => 70, 128 => 70, 100 => 69, 80 => 68, 
             64 => 67 };

  foreach my $size ( @sizes )
    {
    my $o = File::Spec->catfile( $output, $id, $id.'_' . $size . '.jpg');
    # make the dir where we need to put the file in
    my $o_dir = File::Spec->catdir( $output, $id);
    print "Creating $o_dir\n" and mkdir $o_dir unless -d $o_dir;
    chmod 0777, $o_dir;

    $item->[14] = '' if !defined $item->[14];
    my @sharp_factor = (split (/\s*,\s*/, $item->[14] || '1.2,1.2'));

    $sharp_factor[0] = '1.1' if $size < 240;
    $sharp_factor[0] = '1.05' if $size < 128;
    $sharp_factor[1] = '' if $size < 240;
    
    my $geo = $size;
    # rotation 
    $item->[15] = '' if !defined $item->[15];
    my $rot = '';
    if (($item->[15]||'') ne '')
      {
      $rot = "-rotate $item->[15] ";
      $geo = int($size * 0.75 * 0.75) if $item->[15] =~ /^(90|270)$/;
      }
    
    my $scale = '';
    $scale = 'scale 0.8,0.8' if $size < 240;
    $scale = 'scale 1.1,1.1' if $size > 640;
    $scale = 'scale 1.2,1.2' if $size > 800;
    $scale = 'scale 2.5,2.5' if $size > 1024;
    my $fscale = ($size / 2400) * 1.6;                  # 2400 => 1.5, 4800 => 3
    $fscale = ($size / 2400) * 1.2 if $rot;             # rotated images are 
smaller (75%)
    $scale = "scale $fscale,$fscale" if $print;

    my $sharp = "-unsharp $sharp_factor[0]";
    my $second_sharp = '';
    $second_sharp = "-unsharp $sharp_factor[1]" if $sharp_factor[1];

    # print "$sharp $second_sharp";
    my $coord = '8,20';
    $coord = '5,15' if $size < 480;
    $coord = '3,15' if $size < 240;
    $coord = '15,20' if $size > 1280;
    # 2400 * 0.02 = 48
    $coord = ($size * 0.015) . ',' . ($size * 0.020) if $print; 
    $coord = ($size * 0.020) . ',' . ($size * 0.015) if $print && $rot; 

    my $color = 'white';
    my $gravity = $item->[18] || '';
    if ($gravity ne 'none')
      {
      ($gravity,$color) = split (/,/, $gravity);
      $color ||= 'white';
      $gravity ||= 'NE';
      $gravity =~ s/S/South/i;
      $gravity =~ s/E/East/i;
      $gravity =~ s/W/West/i;
      $gravity =~ s/N/North/i;
      $gravity = " -gravity $gravity ";
      }
    
    my $gamma = '';
    $gamma = '-gamma ' . $item->[17] if ($item->[17] ||'') ne '';
    
    # get date the image was shot
    my $date = $db->get($item,'shot');
    foreach (qw/long internal short/)
      {
      $date =~ s/\s+\d\d:\d\d\s+//;                             # remove time
      $cfg->{'copyright_'.$_}->[0] =~ s/##date##/$date/g;
      $date =~ /^(\d\d\d\d)/;
      my $year = $1 || '2003';
      $cfg->{'copyright_'.$_}->[0] =~ s/##year##/$year/g;
      }

#    print "c: $cfg->{copyright_long}->[0]\n";
    my $text = 
      "-font helvetica -fill $color -draw '$scale text $coord 
\"$cfg->{copyright_long}->[0]\"'";
    $text = "-font helvetica -fill $color -draw '$scale text $coord 
\"$cfg->{copyright_short}->[0]\"'"
     if $size < 240;
     $text = '' if $size < 128;

    $text = $gravity . $text 
     if $text ne '' && $gravity !~ /^(none|)$/;         # ne '' && ne 'none';
    $text = '' if $gravity eq 'none';

    my $crop = '';
    $crop = '-crop ' . $item->[16] if ($item->[16] ||'') ne '';
    
    #                                   JPG quality      no thumbnail nor exif
    my $quality = $qs->{$size} || 88;
    $quality = $print if $print;

    my $p = "$crop $gamma $rot -scale $geo +profile '*' -quality $quality 
$sharp $second_sharp $text" .
    #         progressive     
            " -interlace Plane -comment '$cfg->{copyright_internal}->[0]'";
    # apply additional parameters
    my $extra = ''; $extra = $item->[24] if ($item->[24] ||'') ne '';
    $p .= " $extra '$f' $o"; 
    unlink $o;
    print "Couldn't unlink '$o'\n" if -e $o;
#    print "Execute: convert $p\n";
    print "$size ";
    `convert $p`;
    `chmod 664 $o` if -f $o;
    print "Hm, output does not exist. Check permissions.\n" and sleep(10)
     unless -f $o;
    chmod 0664, $o if -f $o;

    }
  } 
  continue 
    { 
    print "\n";
    $id = $db->next();
    last if !defined $id;
    last if defined $last && $last != 0 && $id > $last;
  }

===================


 


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to