Thanks for the suggestions. I tried using undef $im but I still seem to have the problem. The following code builds 10 images. The first one has a white background and the rest all have black backgrounds. I am not sure why. I would expect them to all be the same. Any suggestions? Thanks again.
Here is the code
#!/usr/bin/perl
use GD;
$maxx = 600;
$maxy = 500;
for ($x = 0; $x < 10; $x++)
{
# create a new image
undef $im;
$im = new GD::Image($maxx+50,$maxy);
$im->trueColor(1);
# allocate some colors
$white = $im->colorAllocate(255,255,255);
$black = $im->colorAllocate(0,0,0);
# make the background transparent and interlaced
$im->transparent($white);
$im->interlaced('true');
# Put a black frame around the picture
$im->rectangle(0,0,$maxx-1,$maxy-1,$black);
$im->line(0, $maxy/2, $maxx, $maxy/2, $black);
$png_data = $im->png;
my $file = "TestImage". $x.".png";
open(DISPLAY,">$file") || die "open failed";
binmode DISPLAY;
print DISPLAY $png_data;
close DISPLAY;
print "Output file = ".$file."\n";
undef $png_data;
undef $im;
}
| [reply] [d/l] |
Your example was a little tricky, because of the white transparency, and black rectangles, it all showed up as black
on my screen....BUT I did find your problem. What I noticed was the first file was one third the file size of the subsequent files. Your problem is the truecolor setting. This isn't obvious, it's just that I've seen the question asked before, and had the answer handy. Just look at it as a recipe. The truecolor spec is a global in the c library, and should be set the way I've shown below. What was happening in your script, (I think :-) )was the truecolor was only being set after the first run through, thus the first file was different. I said GD can be tricky sometimes. :-) Try this
#!/usr/bin/perl
use GD;
GD::Image->trueColor(1);
$maxx = 600;
$maxy = 500;
for ($x = 0; $x < 10; $x++)
{
# create a new image
undef $im;
$im = new GD::Image($maxx+50,$maxy);
# not $im->trueColor(1);
# allocate some colors
$white = $im->colorAllocate(255,255,255);
$black = $im->colorAllocate(0,0,0);
# make the background transparent and interlaced
$im->transparent($white);
$im->interlaced('true');
# Put a black frame around the picture
$im->rectangle(0,0,$maxx-1,$maxy-1,$black);
$im->line(0, $maxy/2, $maxx, $maxy/2, $black);
$png_data = $im->png;
my $file = "TestImage". $x.".png";
open(DISPLAY,">$file") || die "open failed";
binmode DISPLAY;
print DISPLAY $png_data;
close DISPLAY;
print "Output file = ".$file."\n";
undef $png_data;
undef $im;
}
I'm not really a human, but I play one on earth.
flash japh
| [reply] [d/l] |
Thanks again for your help. Your solution did the trick!
George
| [reply] |
| [reply] [d/l] |
undef @$image;
which allows you to reuse the IM object, but flushes out all the old data.
I'm not really a human, but I play one on earth.
flash japh
| [reply] [d/l] |