in reply to How to handle Tk::Photo-data()?

OK, let me answer my own question so everyone here could benefit from it. This isn't documented in FAQ's or other places (like the POD-documentation of Tk). I found the answer in the Tk mailinglist archives.

For some fileformats (at least for PNG, GIF and JPEG), the data() method returns the data in base64 encoding. Also, the -data option expects the data to be base64 encoded.

To be complete, here's a snippet of code as example:
#!/usr/bin/perl -w use strict; use GD; use Tk; use Tk::JPEG; use MIME::Base64; # Create the main window my $main = MainWindow->new(); # Open a JPG image in GD my $im = GD::Image->new('feather.jpg'); # Create an empty image with the desired dimensions my $resizedim = new GD::Image(120,120); # Copy everything from $im and resize it into $resizedim $resizedim->copyResized($im,0,0,0,0,120,120,$im->getBounds()); # encode the jpeg-output of the $resizedim my $img = encode_base64($resizedim->jpeg()); # create a Photo object with the data and display it within a label my $image = $main->Photo("button", -data => $img, -format => 'jpeg'); my $label= $main->Label(-image => "button"); $label->grid(-in => $main); MainLoop;

Jouke Visser, Perl 'Adept'

Replies are listed 'Best First'.
Re: Re: How to handle Tk::Photo-data()?
by stormwolfen (Acolyte) on Dec 15, 2001 at 04:22 UTC
    Jouke, I tried your code, and it seems to work well except the image (jpg) I use keeps showing up as all black. I used your code verbatim. Is there something I need to do differently on a Windows system? What OS did you use? Help from anyone?
      I use this piece of code in pVoice (see the code for that) and that works on both Win32 and Un*x platforms. So I think your code or your image may be the problem. Please compare your code to the code of pVoice and see what the problem is.

      Jouke Visser, Perl 'Adept'
      Using Perl to help the disabled: pVoice and pStory
        I posted in Wisdom of the Sages to see if anyone else had the same problem as I had with the black image.

        I got a response: You can read it at:

        I guess there was an error with the image when using the "GD::Image->new" line. His suggestion worked great when I replaced it with the "->newFromJpeg" line. Just thought you may like to know, the final outcome.