Author image Kevin Ryde
and 1 contributors


Image::Base::PNGwriter -- draw PNG format images


 use Image::Base::PNGwriter;
 my $image = Image::Base::PNGwriter->new (-width => 100,
                                          -height => 100);
 $image->line (0,0, 99,99, '#FF00FF');
 $image->rectangle (10,10, 20,15, 'white');
 $image->ellipse (30,30, 90,90, '#AAAA3333DDDD');
 $image->save ('/some/filename.png');


Image::Base::PNGwriter is a subclass of Image::Base,



Image::Base::PNGwriter extends Image::Base to create or update PNG format image files using the Image::PNGwriter module and PNGwriter library.

The native PNGwriter has more features, but this module is an easy way to point Image::Base style code at a PNGwriter to get PNG from some Image::Base code.

X,Y coordinates are the usual Image::Base style 0,0 at the top-left corner. The underlying PNGwriter library is 1,1 at the bottom-left but Image::Base::PNGwriter converts.

Colour Names

Colours can be

     "#RGB"           1 to 4 digit hex

There's no colour name database in PNGwriter and no names here except "black" and "white".


See "FUNCTIONS" in Image::Base for behaviour common to all Image-Base classes.

$image = Image::Base::PNGwriter->new (key=>value,...)

Create and return an image object. A new image can be started with -width and -height,

    $image = Image::Base::PNGwriter->new (-width => 200,
                                          -height => 100);

Or an existing file can be read,

    $image = Image::Base::PNGwriter->new
               (-file => '/some/filename.png');

Or an Image::PNGwriter object can be given,

    my $p = Image::PNGwriter->new(200,100, 0, '/tmp/foo.png');
    $image = Image::Base::PNGwriter->new (-pngwriter => $p);
$image->ellipse ($x1,$y1, $x2,$y2, $colour)
$image->ellipse ($x1,$y1, $x2,$y2, $colour, $fill)

Draw an ellipse within the rectangle top-left corner $x1,$y1 and bottom-right $x2,$y2. Optional $fill true means a filled ellipse.

In the current implementation circles with an odd diameter (meaning $x2-$x1+1 is an odd number and equal to $y2-$y1+1) are drawn with PNGwriter and the rest go to Image::Base. This is a bit inconsistent but uses the features of PNGwriter as far as possible and its drawing should be faster.

$image->diamond ($x1,$y1, $x2,$y2, $colour)
$image->diamond ($x1,$y1, $x2,$y2, $colour, $fill)

Draw a diamond shape within the rectangle top-left $x1,$y1 and bottom-right $x2,$y2. Optional $fill true means a filled diamond.

In PNGwriter 0.5.3 a filled diamond might miss the top-most pixel for some sizes. Currently there's no attempt to do anything about that here. At small sizes the shape sometimes isn't very good either.


The following attributes can be get() and set().

-file (string filename)

The file to load in a new(), and the default filename for subsequent save() or load().

-width (integer)
-height (integer)

Setting these changes the size of the image, but also clears it to all black. The image must be at least 1x1 pixels.

-zlib_compression (integer 0-9 or -1)

The amount of data compression to apply when saving. The value is Zlib style 0 for no compression up to 9 for maximum. -1 means Zlib's default level (which is usually 6).

-pngwriter (Image::PNGwriter object)

The underlying Image::PNGwriter object in use.

Filename and compression level can't be read out of a pngwriter object, which means that if you set -pngwriter then a get() of the -file or -zlib_compression will return undef and there's no default filename for load(). But a save() uses the filename and compression in the object. Perhaps this will improve in the future.


Image::Base, Image::PNGwriter, Image::Base::GD



Image-Base-PNGwriter is Copyright 2010, 2011, 2012 Kevin Ryde

Image-Base-PNGwriter is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.

Image-Base-PNGwriter is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with Image-Base-PNGwriter. If not, see <>.