]> git.imager.perl.org - imager.git/blob - lib/Imager/ImageTypes.pod
sacrifice a chicken to the spell-checker gods
[imager.git] / lib / Imager / ImageTypes.pod
1 =head1 NAME
2
3 Imager::ImageTypes - image models for Imager
4
5 =head1 SYNOPSIS
6
7   use Imager;
8
9   $img = Imager->new(); #  Empty image (size is 0 by 0)
10   $img->open(file=>'lena.png',type=>'png'); # Read image from file
11
12   $img = Imager->new(xsize=>400, ysize=>300); # RGB data
13
14   $img = Imager->new(xsize=>400, ysize=>300,  # Grayscale
15                      channels=>1);            #
16
17   $img = Imager->new(xsize=>400, ysize=>300,  # RGB with alpha
18                      channels=>4);            #
19                                               
20   $img = Imager->new(xsize=>200, ysize=>200,  
21                      type=>'paletted');       # paletted image
22                                               
23   $img = Imager->new(xsize=>200, ysize=>200,  
24                      bits=>16);               # 16 bits/channel rgb
25                                               
26   $img = Imager->new(xsize=>200, ysize=>200,  
27                      bits=>'double');         # 'double' floating point
28                                               #  per channel
29
30   $img->img_set(xsize=>500, ysize=>500,       # reset the image object
31                 channels=>4);
32
33
34   # Example getting information about an Imager object
35
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";
46
47   if ($img->type() eq 'direct') {
48     print "Modifiable Channels: ";
49     print join " ", map {
50       ($img->getmask() & 1<<$_) ? $_ : ()
51     } 0..$img->getchannels();
52     print "\n";
53   
54   } else {
55     # palette info
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]) {
62       my @res = $_->rgba();
63       print "(", join(", ", @res[0..$img->getchannels()-1]), ")\n";
64     }
65   }
66   
67   my @tags = $img->tags();
68   if (@tags) {
69     print "Tags:\n";
70     for(@tags) {
71       print shift @$_, ": ", join " ", @$_, "\n";
72     }
73   } else {
74     print "No tags in image\n";
75   }
76   
77 =head1 DESCRIPTION
78
79 Imager supports two basic models of image:
80
81 =over
82
83 =item *
84
85 direct color - all samples are stored for every pixel.  eg. for an
86 8-bit/sample RGB image, 24 bits are stored for each pixel.
87
88 =item *
89
90 paletted - an index into a table of colors is stored for each pixel.
91
92 =back
93
94 Direct color or paletted images can have 1 to 4 samples per color
95 stored.  Imager treats these as follows:
96
97 =over
98
99 =item *
100
101 1 sample per color - gray scale image.
102
103 =item *
104
105 2 samples per color - gray scale image with alpha channel, allowing
106 transparency.
107
108 =item *
109
110 3 samples per color - RGB image.
111
112 =item *
113
114 4 samples per color - RGB image with alpha channel, allowing
115 transparency.
116
117 =back
118
119 Direct color images can have sample sizes of 8-bits per sample,
120 16-bits per sample or a double precision floating point number per
121 sample (64-bits on many systems).
122
123 Paletted images are always 8-bits/sample.
124
125 To query an existing image about it's parameters see the C<bits()>,
126 C<type()>, C<getwidth()>, C<getheight()>, C<getchannels()> and
127 C<virtual()> methods.
128
129 The coordinate system in Imager has the origin in the upper left
130 corner, see L<Imager::Draw> for details.
131
132 The alpha channel when one is present is considered unassociated -
133 ie the color data has not been scaled by the alpha channel.  Note
134 that not all code follows this (recent) rule, but will over time.
135
136 =head2 Creating Imager Objects
137
138 =over
139
140 =item new()
141
142   $img = Imager->new();
143   $img->read(file=>"alligator.ppm") or die $img->errstr;
144
145 Here C<new()> creates an empty image with width and height of zero.
146 It's only useful for creating an Imager object to call the read()
147 method on later.
148
149   %opts = (xsize=>300, ysize=>200);
150   $img = Imager->new(%opts); # create direct mode RGBA image
151   $img = Imager->new(%opts, channels=>4); # create direct mode RGBA image
152
153 You can also read a file from new():
154
155   $img = Imager->new(file => "someimage.png");
156
157 The parameters for new are:
158
159 =over
160
161 =item *
162
163 C<xsize>, C<ysize> - Defines the width and height in pixels of the
164 image.  These must be positive.
165
166 If not supplied then only placeholder object is created, which can be
167 supplied to the C<read()> or C<img_set()> methods.
168
169 =item *
170
171 C<channels> - The number of channels for the image.  Default 3.  Valid
172 values are from 1 to 4.
173
174 =item *
175
176 C<bits> - The storage type for samples in the image.  Default: 8.
177 Valid values are:
178
179 =over
180
181 =item *
182
183 C<8> - One byte per sample.  256 discrete values.
184
185 =item *
186
187 C<16> - 16-bits per sample, 65536 discrete values.
188
189 =item *
190
191 C<double> - one C double per sample.
192
193 =back
194
195 Note: you can use any Imager function on any sample size image.
196
197 Paletted images always use 8 bits/sample.
198
199 =item *
200
201 C<type> - either C<'direct'> or C<'paletted'>.  Default: C<'direct'>.
202
203 Direct images store color values for each pixel.  
204
205 Paletted images keep a table of up to 256 colors called the palette,
206 each pixel is represented as an index into that table.
207
208 In most cases when working with Imager you will want to use the
209 C<direct> image type.
210
211 If you draw on a C<paletted> image with a color not in the image's
212 palette then Imager will transparently convert it to a C<direct>
213 image.
214
215 =item *
216
217 C<maxcolors> - the maximum number of colors in a paletted image.
218 Default: 256.  This must be in the range 1 through 256.
219
220 =item *
221
222 C<file>, C<fh>, C<fd>, C<callback>, C<readcb> - specify a file name,
223 filehandle, file descriptor or callback to read image data from.  See
224 L<Imager::Files> for details.  The typical use is:
225
226   my $im = Imager->new(file => $filename);
227
228 =item *
229
230 C<filetype> - treated as the file format parameter, as for C<type>
231 with the read() method, eg:
232
233   my $im = Imager->new(file => $filename, filetype => "gif");
234
235 In most cases Imager will detect the file's format itself.
236
237 =back
238
239 In the simplest case just supply the width and height of the image:
240
241   # 8 bit/sample, RGB image
242   my $img = Imager->new(xsize => $width, ysize => $height);
243
244 or if you want an alpha channel:
245
246   # 8 bits/sample, RGBA image
247   my $img = Imager->new(xsize => $width, ysize => $height, channels=>4);
248
249 Note that it I<is> possible for image creation to fail, for example if
250 channels is out of range, or if the image would take too much memory.
251
252 To create paletted images, set the 'type' parameter to 'paletted':
253
254   $img = Imager->new(xsize=>200, ysize=>200, type=>'paletted');
255
256 which creates an image with a maximum of 256 colors, which you can
257 change by supplying the C<maxcolors> parameter.
258
259 For improved color precision you can use the bits parameter to specify
260 16 bit per channel:
261
262   $img = Imager->new(xsize=>200, ysize=>200,
263                      channels=>3, bits=>16);
264
265 or for even more precision:
266
267   $img = Imager->new(xsize=>200, ysize=>200,
268                      channels=>3, bits=>'double');
269
270 to get an image that uses a double for each channel.
271
272 Note that as of this writing all functions should work on images with
273 more than 8-bits/channel, but many will only work at only
274 8-bit/channel precision.
275
276 If you want an empty Imager object to call the read() method on, just
277 call new() with no parameters:
278
279   my $img = Imager->new;
280   $img->read(file=>$filename)
281     or die $img->errstr;
282
283 Though it's much easier now to just call new() with a C<file>
284 parameter:
285
286   my $img = Imager->new(file => $filename)
287     or die Imager->errstr;
288
289 =item img_set()
290
291 img_set destroys the image data in the object and creates a new one
292 with the given dimensions and channels.  For a way to convert image
293 data between formats see the C<convert()> method.
294
295   $img->img_set(xsize=>500, ysize=>500, channels=>4);
296
297 This takes exactly the same parameters as the new() method.
298
299 =back
300
301 =head2 Image Attribute functions
302
303 These return basic attributes of an image object.
304
305 =over
306
307 =item getwidth()
308
309   print "Image width: ", $img->getwidth(), "\n";
310
311 The C<getwidth()> method returns the width of the image.  This value
312 comes either from C<new()> with C<xsize>, C<ysize> parameters or from
313 reading data from a file with C<read()>.  If called on an image that
314 has no valid data in it like C<Imager-E<gt>new()> returns, the return
315 value of C<getwidth()> is undef.
316
317 =item getheight()
318
319   print "Image height: ", $img->getheight(), "\n";
320
321 Same details apply as for L</getwidth()>.
322
323 =item getchannels()
324
325   print "Image has ",$img->getchannels(), " channels\n";
326
327 To get the number of channels in an image C<getchannels()> is used.
328
329
330 =item bits()
331
332 The bits() method retrieves the number of bits used to represent each
333 channel in a pixel, 8 for a normal image, 16 for 16-bit image and
334 'double' for a double/channel image.
335
336   if ($img->bits eq 8) {
337     # fast but limited to 8-bits/sample
338   }
339   else {
340     # slower but more precise
341   }
342
343 =item type()
344
345 The type() method returns either 'direct' for direct color images or
346 'paletted' for paletted images.
347
348   if ($img->type eq 'paletted') {
349     # print the palette
350     for my $color ($img->getcolors) {
351       print join(",", $color->rgba), "\n";
352     }
353   }
354
355 =item virtual()
356
357 The virtual() method returns non-zero if the image contains no actual
358 pixels, for example masked images.
359
360 =for stopwords SDL
361
362 This may also be used for non-native Imager images in the future, for
363 example, for an Imager object that draws on an SDL surface.
364
365 =item is_bilevel()
366
367 Tests if the image will be written as a monochrome or bi-level image
368 for formats that support that image organization.
369
370 In scalar context, returns true if the image is bi-level.
371
372 In list context returns a list:
373
374   ($is_bilevel, $zero_is_white) = $img->is_bilevel;
375
376 An image is considered bi-level, if all of the following are true:
377
378 =over
379
380 =item *
381
382 the image is a paletted image
383
384 =item *
385
386 the image has 1 or 3 channels
387
388 =item *
389
390 the image has only 2 colors in the palette
391
392 =item *
393
394 those 2 colors are black and white, in either order.
395
396 =back
397
398 If a real bi-level organization image is ever added to Imager, this
399 function will return true for that too.
400
401 =back
402
403 =head2 Direct Type Images
404
405 Direct images store the color value directly for each pixel in the
406 image.
407
408 =over
409
410 =item getmask()
411
412   @rgbanames = qw( red green blue alpha );
413   my $mask = $img->getmask();
414   print "Modifiable channels:\n";
415   for (0..$img->getchannels()-1) {
416     print $rgbanames[$_],"\n" if $mask & 1<<$_;
417   }
418
419 =for stopwords th
420
421 C<getmask()> is used to fetch the current channel mask.  The mask
422 determines what channels are currently modifiable in the image.  The
423 channel mask is an integer value, if the C<i-th> least significant bit
424 is set the C<i-th> channel is modifiable.  eg. a channel mask of 0x5
425 means only channels 0 and 2 are writable.
426
427 =item setmask()
428
429   $mask = $img->getmask();
430   $img->setmask(mask=>8);     # modify alpha only
431
432     ...
433
434   $img->setmask(mask=>$mask); # restore previous mask
435
436 C<setmask()> is used to set the channel mask of the image.  See
437 L</getmask()> for details.
438
439 =back
440
441 =head2 Palette Type Images
442
443 Paletted images keep an array of up to 256 colors, and each pixel is
444 stored as an index into that array.
445
446 In general you can work with paletted images in the same way as RGB
447 images, except that if you attempt to draw to a paletted image with a
448 color that is not in the image's palette, the image will be converted
449 to an RGB image.  This means that drawing on a paletted image with
450 anti-aliasing enabled will almost certainly convert the image to RGB.
451
452 Palette management takes place through C<addcolors()>, C<setcolors()>,
453 C<getcolors()> and C<findcolor()>:
454
455 =over
456
457 =item addcolors()
458
459 You can add colors to a paletted image with the addcolors() method:
460
461    my @colors = ( Imager::Color->new(255, 0, 0), 
462                   Imager::Color->new(0, 255, 0) );
463    my $index = $img->addcolors(colors=>\@colors);
464
465 The return value is the index of the first color added, or undef if
466 adding the colors would overflow the palette.
467
468 The only parameter is C<colors> which must be a reference to an array
469 of Imager::Color objects.
470
471 =item setcolors()
472
473   $img->setcolors(start=>$start, colors=>\@colors);
474
475 Once you have colors in the palette you can overwrite them with the
476 C<setcolors()> method:  C<setcolors()> returns true on success.
477
478 Parameters:
479
480 =over
481
482 =item *
483
484 start - the first index to be set.  Default: 0
485
486 =item *
487
488 colors - reference to an array of Imager::Color objects.
489
490 =back
491
492 =item getcolors()
493
494 To retrieve existing colors from the palette use the getcolors() method:
495
496   # get the whole palette
497   my @colors = $img->getcolors();
498   # get a single color
499   my $color = $img->getcolors(start=>$index);
500   # get a range of colors
501   my @colors = $img->getcolors(start=>$index, count=>$count);
502
503 =item findcolor()
504
505 To quickly find a color in the palette use findcolor():
506
507   my $index = $img->findcolor(color=>$color);
508
509 which returns undef on failure, or the index of the color.
510
511 Parameter:
512
513 =over
514
515 =item *
516
517 color - an Imager::Color object.
518
519 =back
520
521 =item colorcount()
522
523 Returns the number of colors in the image's palette:
524
525   my $count = $img->colorcount;
526
527 =item maxcolors()
528
529 Returns the maximum size of the image's palette.
530
531   my $maxcount = $img->maxcolors;
532
533 =back
534
535 =head2 Color Distribution
536
537 =over
538
539 =item getcolorcount()
540
541 Calculates the number of colors in an image.
542
543 The amount of memory used by this is proportional to the number of
544 colors present in the image, so to avoid using too much memory you can
545 supply a maxcolors() parameter to limit the memory used.
546
547 Note: getcolorcount() treats the image as an 8-bit per sample image.
548
549 =over
550
551 =item *
552
553 X<maxcolors!getcolorcount>C<maxcolors> - the maximum number of colors to
554 return.  Default: unlimited.
555
556 =back
557
558   if (defined($img->getcolorcount(maxcolors=>512)) {
559     print "Less than 512 colors in image\n";
560   }
561
562 =item getcolorusagehash()
563
564 Calculates a histogram of colors used by the image.
565
566 =over
567
568 =item *
569
570 X<maxcolors!getcolorusagehash>C<maxcolors> - the maximum number of colors
571 to return.  Default: unlimited.
572
573 =back
574
575 Returns a reference to a hash where the keys are the raw color as
576 bytes, and the values are the counts for that color.
577
578 The alpha channel of the image is ignored.  If the image is gray scale
579 then the hash keys will each be a single character.
580
581   my $colors = $img->getcolorusagehash;
582   my $blue_count = $colors->{pack("CCC", 0, 0, 255)} || 0;
583   print "#0000FF used $blue_count times\n";
584
585 =item getcolorusage()
586
587 Calculates color usage counts and returns just the counts.
588
589 =over
590
591 =item *
592
593 X<maxcolors!getcolorusage>C<maxcolors> - the maximum number of colors
594 to return.  Default: unlimited.
595
596 =back
597
598 Returns a list of the color frequencies in ascending order.
599
600   my @counts = $img->getcolorusage;
601   print "The most common color is used $counts[0] times\n";
602
603 =back
604
605 =head2 Conversion Between Image Types
606
607 Warning: if you draw on a paletted image with colors that aren't in
608 the palette, the image will be internally converted to a normal image.
609
610 =over
611
612 =item to_paletted()
613
614 You can create a new paletted image from an existing image using the
615 to_paletted() method:
616
617  $palimg = $img->to_paletted(\%opts)
618
619 where %opts contains the options specified under L</Quantization options>.
620
621   # convert to a paletted image using the web palette
622   # use the closest color to each pixel
623   my $webimg = $img->to_paletted({ make_colors => 'webmap' });
624
625   # convert to a paletted image using a fairly optimal palette
626   # use an error diffusion dither to try to reduce the average error
627   my $optimag = $img->to_paletted({ make_colors => 'mediancut',
628                                     translate => 'errdiff' });
629
630 =item to_rgb8()
631
632 You can convert a paletted image (or any image) to an 8-bit/channel
633 RGB image with:
634
635   $rgbimg = $img->to_rgb8;
636
637 No parameters.
638
639 =item to_rgb16()
640
641 Convert a paletted image (or any image) to a 16-bit/channel RGB image.
642
643   $rgbimg = $img->to_rgb16;
644
645 No parameters.
646
647 =item to_rgb_double()
648
649 Convert a paletted image (or any image) to an double/channel direct
650 color image.
651
652   $rgbimg = $img->to_rgb_double;
653
654 No parameters.
655
656 =item masked()
657
658 Creates a masked image.  A masked image lets you create an image proxy
659 object that protects parts of the underlying target image.
660
661 In the discussion below there are 3 image objects involved:
662
663 =over
664
665 =item *
666
667 the masked image - the return value of the masked() method.  Any
668 writes to this image are written to the target image, assuming the
669 mask image allows it.
670
671 =item *
672
673 the mask image - the image that protects writes to the target image.
674 Supplied as the C<mask> parameter to the masked() method.
675
676 =item *
677
678 the target image - the image you called the masked() method on.  Any
679 writes to the masked image end up on this image.
680
681 =back
682
683 Parameters:
684
685 =over
686
687 =item *
688
689 mask - the mask image.  If not supplied then all pixels in the target
690 image are writable.  On each write to the masked image, only pixels
691 that have non-zero in channel 0 of the mask image will be written to
692 the original image.  Default: none, if not supplied then no masking is
693 done, but the other parameters are still honored.
694
695 =item *
696
697 left, top - the offset of writes to the target image.  eg. if you
698 attempt to set pixel (x,y) in the masked image, then pixel (x+left,
699 y+top) will be written to in the original image.
700
701 =item *
702
703 bottom, right - the bottom right of the area in the target available
704 from the masked image.
705
706 =back
707
708 Masked images let you control which pixels are modified in an
709 underlying image.  Where the first channel is completely black in the
710 mask image, writes to the underlying image are ignored.
711
712 For example, given a base image called $img:
713
714   my $mask = Imager->new(xsize=>$img->getwidth, ysize=>$img->getheight,
715                          channels=>1);
716   # ... draw something on the mask
717   my $maskedimg = $img->masked(mask=>$mask);
718
719   # now draw on $maskedimg and it will only draw on areas of $img 
720   # where $mask is non-zero in channel 0.
721
722 You can specify the region of the underlying image that is masked
723 using the left, top, right and bottom options.
724
725 If you just want a subset of the image, without masking, just specify
726 the region without specifying a mask.  For example:
727
728   # just work with a 100x100 region of $img
729   my $maskedimg = $img->masked(left => 100, top=>100,
730                                right=>200, bottom=>200);
731
732 =item make_palette()
733
734 This doesn't perform an image conversion, but it can be used to
735 construct a common palette for use in several images:
736
737   my @colors = Imager->make_palette(\%opts, @images);
738
739 You must supply at least one image, even if the C<make_colors>
740 parameter produces a fixed palette.
741
742 On failure returns no colors and you can check C<< Imager->errstr >>.
743
744 =back
745
746 =head2 Tags
747
748 Image tags contain meta-data about the image, ie. information not
749 stored as pixels of the image.
750
751 At the perl level each tag has a name or code and a value, which is an
752 integer or an arbitrary string.  An image can contain more than one
753 tag with the same name or code, but having more than one tag with the
754 same name is discouraged.
755
756 You can retrieve tags from an image using the tags() method, you can
757 get all of the tags in an image, as a list of array references, with
758 the code or name of the tag followed by the value of the tag.
759
760 Imager's support for fairly limited, for access to pretty much all
761 image metadata you may want to try L<Image::ExifTool>.
762
763 =over
764
765 =item tags()
766
767 Retrieve tags from the image.
768
769 With no parameters, retrieves a list array references, each containing
770 a name and value: all tags in the image:
771
772   # get a list of ( [ name1 => value1 ], [ name2 => value2 ] ... )
773   my @alltags = $img->tags;
774   print $_->[0], ":", $_->[1], "\n" for @all_tags;
775
776   # or put it in a hash, but this will lose duplicates
777   my %alltags = map @$_, $img->tags;
778
779 in scalar context this returns the number of tags:
780
781   my $num_tags = $img->tags;
782
783 or you can get all tags values for the given name:
784
785   my @namedtags = $img->tags(name => $name);
786
787 in scalar context this returns the first tag of that name:
788
789   my $firstnamed = $img->tags(name => $name);
790
791 or a given code:
792
793   my @tags = $img->tags(code=>$code);
794
795 =item addtag()
796
797 You can add tags using the addtag() method, either by name:
798
799   my $index = $img->addtag(name=>$name, value=>$value);
800
801 or by code:
802
803   my $index = $img->addtag(code=>$code, value=>$value);
804
805 =item deltag()
806
807 You can remove tags with the deltag() method, either by index:
808
809   $img->deltag(index=>$index);
810
811 or by name:
812
813   $img->deltag(name=>$name);
814
815 or by code:
816
817   $img->deltag(code=>$code);
818
819 In each case deltag() returns the number of tags deleted.
820
821 =item settag()
822
823 settag() replaces any existing tags with a new tag.  This is
824 equivalent to calling deltag() then addtag().
825
826 =back
827
828 =head2 Common Tags
829
830 Many tags are only meaningful for one format.  GIF looping information
831 is pretty useless for JPEG for example.  Thus, many tags are set by
832 only a single reader or used by a single writer.  For a complete list
833 of format specific tags see L<Imager::Files>.
834
835 Since tags are a relatively new addition their use is not wide spread
836 but eventually we hope to have all the readers for various formats set
837 some standard information.
838
839 =over
840
841 =item *
842
843 X<i_xres tag>X<i_yres tag>X<tags, i_xres>X<tags, i_yres>C<i_xres>, C<i_yres>
844 - The spatial resolution of the image in pixels per inch.  If the
845 image format uses a different scale, eg. pixels per meter, then this
846 value is converted.  A floating point number stored as a string.
847
848   # our image was generated as a 300 dpi image
849   $img->settag(name => 'i_xres', value => 300);
850   $img->settag(name => 'i_yres', value => 300);
851
852   # 100 pixel/cm for a TIFF image
853   $img->settag(name => 'tiff_resolutionunit', value => 3); # RESUNIT_CENTIMETER
854   # convert to pixels per inch, Imager will convert it back
855   $img->settag(name => 'i_xres', value => 100 * 2.54);
856   $img->settag(name => 'i_yres', value => 100 * 2.54);
857
858 =item *
859
860 X<i_aspect_only tag>X<tags, i_aspect_only>C<i_aspect_only> - If this is
861 non-zero then the values in i_xres and i_yres are treated as a ratio
862 only.  If the image format does not support aspect ratios then this is
863 scaled so the smaller value is 72 DPI.
864
865 =item *
866
867 X<i_incomplete tag>X<tags, i_incomplete>C<i_incomplete> - If this tag is
868 present then the whole image could not be read.  This isn't
869 implemented for all images yet, and may not be.
870
871 =item *
872
873 X<i_lines_read tag>X<tags, i_lines_read>C<i_lines_read> - If
874 C<i_incomplete> is set then this tag may be set to the number of
875 scan lines successfully read from the file.  This can be used to decide
876 whether an image is worth processing.
877
878 =item *
879
880 X<i_format tag>X<tags, i_format>i_format - The file format this file
881 was read from.
882
883 =item *
884
885 X<i_background>X<tags, i_background>i_background - used when writing
886 an image with an alpha channel to a file format that doesn't support
887 alpha channels.  The C<write> method will convert a normal color
888 specification like "#FF0000" into a color object for you, but if you
889 set this as a tag you will need to format it like
890 C<color(>I<red>C<,>I<green>C<,>I<blue>C<)>, eg color(255,0,0).
891
892 =item *
893
894 X<i_comment>C<i_comment> - used when reading or writing several image
895 formats.  If the format has only one text field it will be read into
896 the C<i_comment> tag or written to the file.
897
898 =back
899
900 =head2 Quantization options
901
902 These options can be specified when calling
903 L<Imager::ImageTypes/to_paletted()>, write_multi() for GIF files, when
904 writing a single image with the C<gifquant> option set to C<gen>, or for
905 direct calls to i_writegif_gen() and i_writegif_callback().
906
907 =over
908
909 =item *
910
911 C<colors> - An arrayref of colors that are fixed.  Note that some
912 color generators will ignore this.  If this is supplied it will be
913 filled with the color table generated for the image.
914
915 =item *
916
917 C<transp> - The type of transparency processing to perform for images
918 with an alpha channel where the output format does not have a proper
919 alpha channel (eg. GIF).  This can be any of:
920
921 =over
922
923 =item *
924
925 C<none> - No transparency processing is done. (default)
926
927 =item *
928
929 C<threshold> - pixels more transparent than C<tr_threshold> are
930 rendered as transparent.
931
932 =item *
933
934 C<errdiff> - An error diffusion dither is done on the alpha channel.
935 Note that this is independent of the translation performed on the
936 color channels, so some combinations may cause undesired artifacts.
937
938 =item *
939
940 C<ordered> - the ordered dither specified by tr_orddith is performed
941 on the alpha channel.
942
943 =back
944
945 This will only be used if the image has an alpha channel, and if there
946 is space in the palette for a transparency color.
947
948 =item *
949
950 C<tr_threshold> - the highest alpha value at which a pixel will be
951 made transparent when C<transp> is 'threshold'. (0-255, default 127)
952
953 =item *
954
955 C<tr_errdiff> - The type of error diffusion to perform on the alpha
956 channel when C<transp> is C<errdiff>.  This can be any defined error
957 diffusion type except for custom (see C<errdiff> below).
958
959 =item *
960
961 C<tr_orddith> - The type of ordered dither to perform on the alpha
962 channel when C<transp> is 'ordered'.  Possible values are:
963
964 =over
965
966 =item *
967
968 C<random> - A semi-random map is used.  The map is the same each time.
969
970 =item *
971
972 C<dot8> - 8x8 dot dither.
973
974 =item *
975
976 C<dot4> - 4x4 dot dither
977
978 =item *
979
980 C<hline> - horizontal line dither.
981
982 =item *
983
984 C<vline> - vertical line dither.
985
986 =item *
987
988 C</line>, C<slashline> - diagonal line dither
989
990 =item *
991
992 C<\line>, C<backline> - diagonal line dither
993
994 =item *
995
996 C<tiny> - dot matrix dither (currently the default).  This is probably
997 the best for displays (like web pages).
998
999 =item *
1000
1001 C<custom> - A custom dither matrix is used - see C<tr_map>.
1002
1003 =back
1004
1005 =item *
1006
1007 C<tr_map> - When tr_orddith is custom this defines an 8 x 8 matrix of
1008 integers representing the transparency threshold for pixels
1009 corresponding to each position.  This should be a 64 element array
1010 where the first 8 entries correspond to the first row of the matrix.
1011 Values should be between 0 and 255.
1012
1013 =item *
1014
1015 C<make_colors> - Defines how the quantization engine will build the
1016 palette(s).  Currently this is ignored if C<translate> is C<giflib>,
1017 but that may change.  Possible values are:
1018
1019 =over
1020
1021 =item *
1022
1023 C<none> - only colors supplied in 'colors' are used.
1024
1025 =item *
1026
1027 C<webmap> - the web color map is used (need URL here.)
1028
1029 =item *
1030
1031 C<addi> - The original code for generating the color map (Addi's code) is
1032 used.
1033
1034 =item *
1035
1036 C<mediancut> - Uses a median-cut algorithm, faster than C<addi>, but not
1037 as good a result.
1038
1039 =item *
1040
1041 C<mono>, C<monochrome> - a fixed black and white palette, suitable for
1042 producing bi-level images (eg. facsimile)
1043
1044 =item *
1045
1046 C<gray>, C<gray4>, C<gray16> - make fixed gray palette with 256, 4 or
1047 16 entries respectively.
1048
1049 =back
1050
1051 Other methods may be added in the future.
1052
1053 =item *
1054
1055 C<colors> - an arrayref containing Imager::Color objects, which
1056 represents the starting set of colors to use in translating the
1057 images.  C<webmap> will ignore this.  On return the final colors used
1058 are copied back into this array (which is expanded if necessary.)
1059
1060 =item *
1061
1062 C<max_colors> - the maximum number of colors to use in the image.
1063
1064 =item *
1065
1066 C<translate> - The method used to translate the RGB values in the
1067 source image into the colors selected by make_colors.  Note that
1068 make_colors is ignored when C<translate> is C<giflib>.
1069
1070 Possible values are:
1071
1072 =over
1073
1074 =item *
1075
1076 C<giflib> - this is a historical equivalent for C<closest> that also
1077 forces C<make_colors> to C<mediancut>.
1078
1079 =item *
1080
1081 C<closest> - the closest color available is used.
1082
1083 =item *
1084
1085 C<perturb> - the pixel color is modified by C<perturb>, and the
1086 closest color is chosen.
1087
1088 =item *
1089
1090 C<errdiff> - an error diffusion dither is performed.  If the supplied
1091 (or generated) palette contains only grays the source colors are
1092 converted to gray before error diffusion is performed.
1093
1094 =back
1095
1096 It's possible other C<translate> values will be added.
1097
1098 =item *
1099
1100 C<errdiff> - The type of error diffusion dither to perform.  These
1101 values (except for custom) can also be used in tr_errdif.
1102
1103 =for stopwords Floyd-Steinberg Jarvis Judice Ninke Stucki
1104
1105 =over
1106
1107 =item *
1108
1109 C<floyd> - Floyd-Steinberg dither
1110
1111 =item *
1112
1113 C<jarvis> - Jarvis, Judice and Ninke dither
1114
1115 =item *
1116
1117 C<stucki> - Stucki dither
1118
1119 =item *
1120
1121 C<custom> - custom.  If you use this you must also set C<errdiff_width>,
1122 C<errdiff_height> and C<errdiff_map>.
1123
1124 =back
1125
1126 =item *
1127
1128 C<errdiff_width>, C<errdiff_height>, C<errdiff_orig>, C<errdiff_map> -
1129 When C<translate> is C<errdiff> and C<errdiff> is C<custom> these
1130 define a custom error diffusion map.  C<errdiff_width> and
1131 C<errdiff_height> define the size of the map in the arrayref in
1132 C<errdiff_map>.  C<errdiff_orig> is an integer which indicates the
1133 current pixel position in the top row of the map.
1134
1135 =item *
1136
1137 C<perturb> - When translate is C<perturb> this is the magnitude of the
1138 random bias applied to each channel of the pixel before it is looked
1139 up in the color table.
1140
1141 =back
1142
1143 =head1 INITIALIZATION
1144
1145 This documents the Imager initialization function, which you will
1146 almost never need to call.
1147
1148 =over
1149
1150 =item init()
1151
1152 This is a function, not a method.
1153
1154 This function is a mess, it can take the following named parameters:
1155
1156 =over
1157
1158 =item *
1159
1160 C<log> - name of a log file to log Imager's actions to.  Not all
1161 actions are logged, but the debugging memory allocator does log
1162 allocations here.  Ignored if Imager has been built without logging
1163 support.  Preferably use the open_log() method instead.
1164
1165 =item *
1166
1167 C<loglevel> - the maximum level of message to log.  Default: 1.
1168
1169 =item *
1170
1171 C<warn_obsolete> - if this is non-zero then Imager will warn when you
1172 attempt to use obsoleted parameters or functionality.  This currently
1173 only includes the old GIF output options instead of tags.
1174
1175 =item *
1176
1177 C<t1log> - if non-zero then T1lib will be configured to produce a log
1178 file.  This will fail if there are any existing T1lib font objects.
1179
1180 =back
1181
1182 Example:
1183
1184   Imager::init(log => 'trace.log', loglevel => 9);
1185
1186 =back
1187
1188 =head1 LOGGING METHODS
1189
1190 Imager can open an internal log to send debugging information to.
1191 This log is extensively used in Imager's tests, but you're unlikely to
1192 use it otherwise.
1193
1194 If Imager has been built with logging disabled, the methods fail
1195 quietly.
1196
1197 =over
1198
1199 =item open_log()
1200
1201 Open the Imager debugging log file.
1202
1203 =over
1204
1205 =item *
1206
1207 C<log> - the file name to log to.  If this is undef logging information
1208 is sent to the standard error stream.
1209
1210 =item *
1211
1212 C<loglevel> the level of logging to produce.  Default: 1.
1213
1214 =back
1215
1216 Returns a true value if the log file was opened successfully.
1217
1218   # send debug output to test.log
1219   Imager->open_log(log => "test.log");
1220
1221   # send debug output to stderr
1222   Imager->open_log();
1223
1224 =item close_log()
1225
1226 Close the Imager debugging log file and disable debug logging.
1227
1228 No parameters.
1229
1230   Imager->close_log();
1231
1232 =item log()
1233
1234  Imager->log($message)
1235  Imager->log($message, $level)
1236
1237 This method does not use named parameters.
1238
1239 The default for C<$level> is 1.
1240
1241 Send a message to the debug log.
1242
1243   Imager->log("My code got here!");
1244
1245 =item is_logging()
1246
1247 Returns a true value if logging is enabled.
1248
1249 =back
1250
1251 =head1 AUTHOR
1252
1253 Tony Cook <tonyc@cpan.org>, Arnar M. Hrafnkelsson
1254
1255 =head1 SEE ALSO
1256
1257 Imager(3), Imager::Files(3), Imager::Draw(3),
1258 Imager::Color(3), Imager::Fill(3), Imager::Font(3),
1259 Imager::Transformations(3), Imager::Engines(3), Imager::Filters(3),
1260 Imager::Expr(3), Imager::Matrix2d(3), Imager::Fountain(3)
1261
1262 =cut