On Tue, 2006-06-06 at 13:13 -0500, [EMAIL PROTECTED] wrote:
> "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]
> 

Learning to use Object-Oriented Perl is difficult. The problem is that
since we have seen your script, it's hard to tell you exactly what needs
to be done.

> ============
> 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.

The line: print Dumper $self;
should be just before the line you posted in your earlier post:
$self->_read_file($self->{file});


> ===========
> 
> 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

These two modules are not standard:

> use ArtShow::Config;  
> use English;


> 
> my $VERSION = '0.14';
> 
> BEGIN
>   {
>   $|++;                       # output buffer off

Bad idea. Most OSes do the right thing without this. You will only want
to turn this on for a socket or a pipe, and only if the software on the
other side reads a character at a time and responds instantly to a
single character. See `perldoc perlvar` and search for
'$OUTPUT_AUTOFLUSH`

>   }
> 
> 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;
>   }
> 
> ===================
> 
> 
>  
> 
> 
-- 
__END__

Just my 0.00000002 million dollars worth,
   --- Shawn

"For the things we have to learn before we can do them, we learn by doing them."
  Aristotle

* Perl tutorials at http://perlmonks.org/?node=Tutorials
* A searchable perldoc is at http://perldoc.perl.org/



-- 
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