Guildencrantz has asked for the wisdom of the Perl Monks concerning the following question:

I've found an interesting issue where under ImageMagick-6.0.7.1 I can resize an image and it remains 8-bit, however under ImageMagick-perl-6.2.8.0 resized images are written at 16-bit. I need this code to generate 8-bit thumbnails on both systems and I can't seem to find a way to force the 8-bit depth from within PerlMagick. As an example I wrote this script:
#!/usr/bin/perl use Image::Magick; my $thumbnail = Image::Magick->new; $thumbnail->Read("full.bmp"); $thumbnail->Write("full.png"); $thumbnail->Resize(width=>'200', height=>'150'); $thumbnail->Write("tn_200x150.png"); $thumbnail->Resize(width=>'100', height=>'75'); $thumbnail->Write("tn_100x75.png"); undef $thumbnail; exec "file /home/mhenkel/*.png";
On the ImageMagick-6.0.7.1 it outputs:
/home/mhenkel/full.png: PNG image data, 240 x 294, 8-bit/color R +GB, non-interlaced /home/mhenkel/tn_100x75.png: PNG image data, 100 x 75, 8-bit/color RG +B, non-interlaced /home/mhenkel/tn_200x150.png: PNG image data, 200 x 150, 8-bit/color R +GB, non-interlaced
and the ImageMagick-perl-6.2.8.0 system:
/home/mhenkel/full.png: PNG image data, 240 x 294, 8-bit/color R +GB, non-interlaced /home/mhenkel/tn_100x75.png: PNG image data, 100 x 75, 16-bit/color R +GB, non-interlaced /home/mhenkel/tn_200x150.png: PNG image data, 200 x 150, 16-bit/color +RGB, non-interlaced
Ideas? Suggestions?

Replies are listed 'Best First'.
Re: Image::Magick Depth
by parv (Parson) on Sep 03, 2008 at 03:40 UTC
      Unfortunately the Depth attribute is immutable. All references I've found suggest some kind of SetDepth function which does the changing. I just can't seem to find what it is.
        DUH! Okay, I should have seen this before, but there's a Set() function:
        $thumbnail->Set(depth => 8);
        So, to ensure that my code performs as expected on both systems:
        #!/usr/bin/perl use Image::Magick; my $thumbnail = Image::Magick->new; $thumbnail->Read("full.bmp"); $thumbnail->Set(depth => 8); $thumbnail->Write("full.png"); $thumbnail->Resize(width=>'200', height=>'150'); $thumbnail->Write("tn_200x150.png"); $thumbnail->Resize(width=>'100', height=>'75'); $thumbnail->Write("tn_100x75.png"); undef $thumbnail; exec "file /home/mhenkel/*.png";
Re: Image::Magick Depth
by kyle (Abbot) on Sep 03, 2008 at 03:41 UTC

    I'd try this...

    $thumbnail->Quantize( colors => 2**8 );
      While that changes the colors, it doesn't change the channel depth.