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