3 Imager::ImageTypes - Internal image representation information
9 $img = Imager->new(); # Empty image (size is 0 by 0)
10 $img->open(file=>'lena.png',type=>'png'); # Read image from file
12 $img = Imager->new(xsize=>400, ysize=>300); # RGB data
14 $img = Imager->new(xsize=>400, ysize=>300, # Grayscale
17 $img = Imager->new(xsize=>400, ysize=>300, # RGB with alpha
20 $img = Imager->new(xsize=>200, ysize=>200,
21 type=>'paletted'); # paletted image
23 $img = Imager->new(xsize=>200, ysize=>200,
24 bits=>16); # 16 bits/channel rgb
26 $img = Imager->new(xsize=>200, ysize=>200,
27 bits=>'double'); # 'double' floating point
30 $img->img_set(xsize=>500, ysize=>500, # reset the image object
34 # Example getting information about an Imager object
36 print "Image information:\n";
37 print "Width: ", $img->getwidth(), "\n";
38 print "Height: ", $img->getheight(), "\n";
39 print "Channels: ", $img->getchannels(), "\n";
40 print "Bits/Channel: ", $img->bits(), "\n";
41 print "Virtual: ", $img->virtual() ? "Yes" : "No", "\n";
42 my $colorcount = $img->getcolorcount(maxcolors=>512);
43 print "Actual number of colors in image: ";
44 print defined($colorcount) ? $colorcount : ">512", "\n";
45 print "Type: ", $img->type(), "\n";
47 if ($img->type() eq 'direct') {
48 print "Modifiable Channels: ";
50 ($img->getmask() & 1<<$_) ? $_ : ()
51 } 0..$img->getchannels();
56 my $count = $img->colorcount;
57 @colors = $img->getcolors();
58 print "Palette size: $count\n";
59 my $mx = @colors > 4 ? 4 : 0+@colors;
60 print "First $mx entries:\n";
61 for (@colors[0..$mx-1]) {
63 print "(", join(", ", @res[0..$img->getchannels()-1]), ")\n";
67 my @tags = $img->tags();
71 print shift @$_, ": ", join " ", @$_, "\n";
74 print "No tags in image\n";
79 Imager supports various internal image representations of images. The
80 two major classes are direct mode and paletted mode. In paletted mode
81 an image has a numbered list of colors and the color of each pixel is
82 determined by an index into the table. In direct mode there is no
83 color palette and each pixel has a seperate value for red green and
84 blue for RGB images. To complicate matters it's possible to have
85 other color spaces than RGB, for example, gray, gray and alpha, or
86 red, green, blue and alpha.
88 In addition it's possible to have direct type images with 8 bits/channel
89 16 bits/channel or double/channel (64 bits on many systems).
91 To query an existing image about it's parameters see the C<bits()>,
92 C<type()>, C<getwidth()>, C<getheight()>, C<getchannels()> and
95 The coordinate system in Imager has the origin in the upper left
96 corner, see L<Imager::Draw> for details.
98 =head2 Creating Imager Objects
104 $img = Imager->new();
105 $img->read(file=>"alligator.ppm") or die $img->errstr;
107 Here C<new()> creates an empty image with width and height of zero.
108 It's only useful for creating an Imager object to call the read()
111 %opts = (xsize=>300, ysize=>200);
112 $img = Imager->new(%opts); # create direct mode RGBA image
113 $img = Imager->new(%opts, channels=>4); # create direct mode RGBA image
115 The parameters for new are:
121 C<xsize>, C<ysize> - Defines the width and height in pixels of the
122 image. These must be positive.
124 If not supplied then only placeholder object is created, which can be
125 supplied to the C<read()> or C<img_set()> methods.
129 C<channels> - The number of channels for the image. Default 3. Valid
130 values are from 1 to 4.
134 C<bits> - The storage type for samples in the image. Default: 8.
141 C<8> - One byte per sample. 256 discrete values.
145 C<16> - 16-bits per sample, 65536 discrete values.
149 C<double> - one C double per sample.
153 Note: you can use any Imager function on any sample size image.
155 Paletted images always use 8 bits/sample.
159 C<type> - either C<'direct'> or C<'paletted'>. Default: C<'direct'>.
161 Direct images store color values for each pixel.
163 Paletted images keep a table of up to 256 colors called the palette,
164 each pixel is represented as an index into that table.
166 In most cases when working with Imager you will want to use the
167 C<direct> image type.
169 If you draw on a C<paletted> image with a color not in the image's
170 palette then Imager will transparently convert it to a C<direct>
175 C<maxcolors> - the maximum number of colors in a paletted image.
176 Default: 256. This must be in the range 1 through 256.
180 In the simplest case just supply the width and height of the image:
182 # 8 bit/sample, RGB image
183 my $img = Imager->new(xsize => $width, ysize => $height);
185 or if you want an alpha channel:
187 # 8 bits/sample, RGBA image
188 my $img = Imager->new(xsize => $width, ysize => $height, channels=>4);
190 Note that it I<is> possible for image creation to fail, for example if
191 channels is out of range, or if the image would take too much memory.
193 To create paletted images, set the 'type' parameter to 'paletted':
195 $img = Imager->new(xsize=>200, ysize=>200, type=>'paletted');
197 which creates an image with a maxiumum of 256 colors, which you can
198 change by supplying the C<maxcolors> parameter.
200 For improved color precision you can use the bits parameter to specify
203 $img = Imager->new(xsize=>200, ysize=>200,
204 channels=>3, bits=>16);
206 or for even more precision:
208 $img = Imager->new(xsize=>200, ysize=>200,
209 channels=>3, bits=>'double');
211 to get an image that uses a double for each channel.
213 Note that as of this writing all functions should work on images with
214 more than 8-bits/channel, but many will only work at only
215 8-bit/channel precision.
217 If you want an empty Imager object to call the read() method on, just
218 call new() with no parameters:
220 my $img = Imager->new;
221 $img->read(file=>$filename)
226 img_set destroys the image data in the object and creates a new one
227 with the given dimensions and channels. For a way to convert image
228 data between formats see the C<convert()> method.
230 $img->img_set(xsize=>500, ysize=>500, channels=>4);
232 This takes exactly the same parameters as the new() method.
236 =head2 Getting Information About an Imager Object
242 print "Image width: ", $img->getwidth(), "\n";
244 The C<getwidth()> method returns the width of the image. This value
245 comes either from C<new()> with xsize,ysize parameters or from reading
246 data from a file with C<read()>. If called on an image that has no
247 valid data in it like C<Imager-E<gt>new()> returns, the return value
248 of C<getwidth()> is undef.
252 print "Image height: ", $img->getheight(), "\n";
254 Same details apply as for L<getwidth>.
258 print "Image has ",$img->getchannels(), " channels\n";
260 To get the number of channels in an image C<getchannels()> is used.
265 It is possible to have Imager find the number of colors in an image by
266 with the C<getcolorcount()> method. It requires memory proportionally
267 to the number of colors in the image so it is possible to have it stop
268 sooner if you only need to know if there are more than a certain
269 number of colors in the image. If there are more colors than asked
270 for the function return undef. Examples:
272 if (defined($img->getcolorcount(maxcolors=>512)) {
273 print "Less than 512 colors in image\n";
279 The bits() method retrieves the number of bits used to represent each
280 channel in a pixel, 8 for a normal image, 16 for 16-bit image and
281 'double' for a double/channel image.
283 if ($img->bits eq 8) {
284 # fast but limited to 8-bits/sample
287 # slower but more precise
292 The type() method returns either 'direct' for truecolor images or
293 'paletted' for paletted images.
295 if ($img->type eq 'paletted') {
297 for my $color ($img->getcolors) {
298 print join(",", $color->rgba), "\n";
304 The virtual() method returns non-zero if the image contains no actual
305 pixels, for example masked images.
307 This may also be used for non-native Imager images in the future, for
308 example, for an Imager object that draws on an SDL surface.
312 =head2 Direct Type Images
314 Direct images store the color value directly for each pixel in the
321 @rgbanames = qw( red green blue alpha );
322 my $mask = $img->getmask();
323 print "Modifiable channels:\n";
324 for (0..$img->getchannels()-1) {
325 print $rgbanames[$_],"\n" if $mask & 1<<$_;
328 C<getmask()> is used to fetch the current channel mask. The mask
329 determines what channels are currently modifiable in the image. The
330 channel mask is an integer value, if the i-th lsb is set the i-th
331 channel is modifiable. eg. a channel mask of 0x5 means only channels
332 0 and 2 are writable.
336 $mask = $img->getmask();
337 $img->setmask(mask=>8); # modify alpha only
341 $img->setmask(mask=>$mask); # restore previous mask
343 C<setmask()> is used to set the channel mask of the image. See
344 L<getmask> for details.
348 =head2 Palette Type Images
350 Paletted images keep an array of up to 256 colors, and each pixel is
351 stored as an index into that array.
353 In general you can work with paletted images in the same way as RGB
354 images, except that if you attempt to draw to a paletted image with a
355 color that is not in the image's palette, the image will be converted
356 to an RGB image. This means that drawing on a paletted image with
357 anti-aliasing enabled will almost certainly convert the image to RGB.
359 Palette management takes place through C<addcolors()>, C<setcolors()>,
360 C<getcolors()> and C<findcolor()>:
366 You can add colors to a paletted image with the addcolors() method:
368 my @colors = ( Imager::Color->new(255, 0, 0),
369 Imager::Color->new(0, 255, 0) );
370 my $index = $img->addcolors(colors=>\@colors);
372 The return value is the index of the first color added, or undef if
373 adding the colors would overflow the palette.
375 The only parameter is C<colors> which must be a reference to an array
376 of Imager::Color objects.
380 $img->setcolors(start=>$start, colors=>\@colors);
382 Once you have colors in the palette you can overwrite them with the
383 C<setcolors()> method: C<setcolors()> returns true on success.
391 start - the first index to be set. Default: 0
395 colors - reference to an array of Imager::Color objects.
401 To retrieve existing colors from the palette use the getcolors() method:
403 # get the whole palette
404 my @colors = $img->getcolors();
406 my $color = $img->getcolors(start=>$index);
407 # get a range of colors
408 my @colors = $img->getcolors(start=>$index, count=>$count);
412 To quickly find a color in the palette use findcolor():
414 my $index = $img->findcolor(color=>$color);
416 which returns undef on failure, or the index of the color.
424 color - an Imager::Color object.
430 Returns the number of colors in the image's palette:
432 my $count = $img->colorcount;
436 Returns the maximum size of the image's palette.
438 my $maxcount = $img->maxcolors;
442 =head2 Conversion Between Image Types
444 Warning: if you draw on a paletted image with colors that aren't in
445 the palette, the image will be internally converted to a normal image.
451 You can create a new paletted image from an existing image using the
452 to_paletted() method:
454 $palimg = $img->to_paletted(\%opts)
456 where %opts contains the options specified under L<Quantization options>.
458 # convert to a paletted image using the web palette
459 # use the closest color to each pixel
460 my $webimg = $img->to_paletted({ make_colors => 'webmap' });
462 # convert to a paletted image using a fairly optimal palette
463 # use an error diffusion dither to try to reduce the average error
464 my $optimag = $img->to_paletted({ make_colors => 'mediancut',
465 translate => 'errdiff' });
469 You can convert a paletted image (or any image) to an 8-bit/channel
472 $rgbimg = $img->to_rgb8;
478 Creates a masked image. A masked image lets you create an image proxy
479 object that protects parts of the underlying target image.
481 In the discussion below there are 3 image objects involved:
487 the masked image - the return value of the masked() method. Any
488 writes to this image are written to the target image, assuming the
489 mask image allows it.
493 the mask image - the image that protects writes to the target image.
494 Supplied as the C<mask> parameter to the masked() method.
498 the target image - the image you called the masked() method on. Any
499 writes to the masked image end up on this image.
509 mask - the mask image. If not supplied then all pixels in the target
510 image are writable. On each write to the masked image, only pixels
511 that have non-zero in chennel 0 of the mask image will be written to
512 the original image. Default: none, if not supplied then no masking is
513 done, but the other parameters are still honored.
517 left, top - the offset of writes to the target image. eg. if you
518 attempt to set pixel (x,y) in the masked image, then pixel (x+left,
519 y+top) will be written to in the original image.
523 bottom, right - the bottom right of the area in the target available
524 from the masked image.
528 Masked images let you control which pixels are modified in an
529 underlying image. Where the first channel is completely black in the
530 mask image, writes to the underlying image are ignored.
532 For example, given a base image called $img:
534 my $mask = Imager->new(xsize=>$img->getwidth, ysize=>$img->getheight,
536 # ... draw something on the mask
537 my $maskedimg = $img->masked(mask=>$mask);
539 # now draw on $maskedimg and it will only draw on areas of $img
540 # where $mask is non-zero in channel 0.
542 You can specifiy the region of the underlying image that is masked
543 using the left, top, right and bottom options.
545 If you just want a subset of the image, without masking, just specify
546 the region without specifying a mask. For example:
548 # just work with a 100x100 region of $img
549 my $maskedimg = $img->masked(left => 100, top=>100,
550 right=>200, bottom=>200);
556 Image tags contain meta-data about the image, ie. information not
557 stored as pixels of the image.
559 At the perl level each tag has a name or code and a value, which is an
560 integer or an arbitrary string. An image can contain more than one
561 tag with the same name or code, but having more than one tag with the
562 same name is discouraged.
564 You can retrieve tags from an image using the tags() method, you can
565 get all of the tags in an image, as a list of array references, with
566 the code or name of the tag followed by the value of the tag.
572 Retrieve tags from the image.
574 With no parameters, retrieves a list array references, each containing
575 a name and value: all tags in the image:
577 # get a list of ( [ name1 => value1 ], [ name2 => value2 ] ... )
578 my @alltags = $img->tags;
579 print $_->[0], ":", $_->[1], "\n" for @all_tags;
581 # or put it in a hash, but this will lose duplicates
582 my %alltags = map @$_, $img->tags;
584 in scalar context this returns the number of tags:
586 my $num_tags = $img->tags;
588 or you can get all tags values for the given name:
590 my @namedtags = $img->tags(name => $name);
592 in scalar context this returns the first tag of that name:
594 my $firstnamed = $img->tags(name => $name);
598 my @tags = $img->tags(code=>$code);
602 You can add tags using the addtag() method, either by name:
604 my $index = $img->addtag(name=>$name, value=>$value);
608 my $index = $img->addtag(code=>$code, value=>$value);
612 You can remove tags with the deltag() method, either by index:
614 $img->deltag(index=>$index);
618 $img->deltag(name=>$name);
622 $img->deltag(code=>$code);
624 In each case deltag() returns the number of tags deleted.
628 settag() replaces any existing tags with a new tag. This is
629 equivalent to calling deltag() then addtag().
635 Many tags are only meaningful for one format. GIF looping information
636 is pretty useless for JPEG for example. Thus, many tags are set by
637 only a single reader or used by a single writer. For a complete list
638 of format specific tags see L<Imager::Files>.
640 Since tags are a relatively new addition their use is not wide spread
641 but eventually we hope to have all the readers for various formats set
642 some standard information.
650 The spatial resolution of the image in pixels per inch. If the image
651 format uses a different scale, eg. pixels per meter, then this value
652 is converted. A floating point number stored as a string.
656 If this is non-zero then the values in i_xres and i_yres are treated
657 as a ratio only. If the image format does not support aspect ratios
658 then this is scaled so the smaller value is 72dpi.
662 If this tag is present then the whole image could not be read. This
663 isn't implemented for all images yet, and may not be.
667 The file format this file was read from.
671 =head2 Quantization options
673 These options can be specified when calling write_multi() for gif
674 files, when writing a single image with the gifquant option set to
675 'gen', or for direct calls to i_writegif_gen and i_writegif_callback.
681 A arrayref of colors that are fixed. Note that some color generators
686 The type of transparency processing to perform for images with an
687 alpha channel where the output format does not have a proper alpha
688 channel (eg. gif). This can be any of:
694 No transparency processing is done. (default)
698 Pixels more transparent that tr_threshold are rendered as transparent.
702 An error diffusion dither is done on the alpha channel. Note that
703 this is independent of the translation performed on the colour
704 channels, so some combinations may cause undesired artifacts.
708 The ordered dither specified by tr_orddith is performed on the alpha
713 This will only be used if the image has an alpha channel, and if there
714 is space in the palette for a transparency colour.
718 The highest alpha value at which a pixel will be made transparent when
719 transp is 'threshold'. (0-255, default 127)
723 The type of error diffusion to perform on the alpha channel when
724 transp is 'errdiff'. This can be any defined error diffusion type
725 except for custom (see errdiff below).
729 The type of ordered dither to perform on the alpha channel when transp
730 is 'ordered'. Possible values are:
736 A semi-random map is used. The map is the same each time.
748 horizontal line dither.
752 vertical line dither.
768 dot matrix dither (currently the default). This is probably the best
769 for displays (like web pages).
773 A custom dither matrix is used - see tr_map
779 When tr_orddith is custom this defines an 8 x 8 matrix of integers
780 representing the transparency threshold for pixels corresponding to
781 each position. This should be a 64 element array where the first 8
782 entries correspond to the first row of the matrix. Values should be
787 Defines how the quantization engine will build the palette(s).
788 Currently this is ignored if 'translate' is 'giflib', but that may
789 change. Possible values are:
795 Only colors supplied in 'colors' are used.
799 The web color map is used (need url here.)
803 The original code for generating the color map (Addi's code) is used.
807 Uses a mediancut algorithm, faster than 'addi', but not as good a
812 Other methods may be added in the future.
816 A arrayref containing Imager::Color objects, which represents the
817 starting set of colors to use in translating the images. webmap will
818 ignore this. The final colors used are copied back into this array
819 (which is expanded if necessary.)
823 The maximum number of colors to use in the image.
827 The method used to translate the RGB values in the source image into
828 the colors selected by make_colors. Note that make_colors is ignored
829 whene translate is 'giflib'.
837 The giflib native quantization function is used.
841 The closest color available is used.
845 The pixel color is modified by perturb, and the closest color is chosen.
849 An error diffusion dither is performed.
853 It's possible other transate values will be added.
857 The type of error diffusion dither to perform. These values (except
858 for custom) can also be used in tr_errdif.
864 Floyd-Steinberg dither
868 Jarvis, Judice and Ninke dither
876 Custom. If you use this you must also set errdiff_width,
877 errdiff_height and errdiff_map.
889 When translate is 'errdiff' and errdiff is 'custom' these define a
890 custom error diffusion map. errdiff_width and errdiff_height define
891 the size of the map in the arrayref in errdiff_map. errdiff_orig is
892 an integer which indicates the current pixel position in the top row
897 When translate is 'perturb' this is the magnitude of the random bias
898 applied to each channel of the pixel before it is looked up in the
909 Tony Cook, Arnar M. Hrafnkelsson
913 Imager(3), Imager::Files(3), Imager::Draw(3),
914 Imager::Color(3), Imager::Fill(3), Imager::Font(3),
915 Imager::Transformations(3), Imager::Engines(3), Imager::Filters(3),
916 Imager::Expr(3), Imager::Matrix2d(3), Imager::Fountain(3)