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