older versions of EU::MM don't export WriteEmptyMakefile, but do provide it
[imager.git] / TIFF / TIFF.pm
1 package Imager::File::TIFF;
2 use strict;
3 use Imager;
4 use vars qw($VERSION @ISA);
5
6 BEGIN {
7   $VERSION = "0.78";
8
9   eval {
10     require XSLoader;
11     XSLoader::load('Imager::File::TIFF', $VERSION);
12     1;
13   } or do {
14     require DynaLoader;
15     push @ISA, 'DynaLoader';
16     bootstrap Imager::File::TIFF $VERSION;
17   };
18 }
19
20 Imager->register_reader
21   (
22    type=>'tiff',
23    single => 
24    sub { 
25      my ($im, $io, %hsh) = @_;
26
27      my $allow_incomplete = $hsh{allow_incomplete};
28      defined $allow_incomplete or $allow_incomplete = 0;
29
30      my $page = $hsh{page};
31      defined $page or $page = 0;
32      $im->{IMG} = i_readtiff_wiol($io, $allow_incomplete, $page);
33
34      unless ($im->{IMG}) {
35        $im->_set_error(Imager->_error_as_msg);
36        return;
37      }
38
39      return $im;
40    },
41    multiple =>
42    sub {
43      my ($io, %hsh) = @_;
44
45      my @imgs = i_readtiff_multi_wiol($io);
46      unless (@imgs) {
47        Imager->_set_error(Imager->_error_as_msg);
48        return;
49      }
50
51      return map bless({ IMG => $_, ERRSTR => undef }, "Imager"), @imgs;
52    },
53   );
54
55 Imager->register_writer
56   (
57    type=>'tiff',
58    single => 
59    sub { 
60      my ($im, $io, %hsh) = @_;
61
62      $im->_set_opts(\%hsh, "i_", $im);
63      $im->_set_opts(\%hsh, "tiff_", $im);
64      $im->_set_opts(\%hsh, "exif_", $im);
65
66      if (defined $hsh{class} && $hsh{class} eq "fax") {
67        my $fax_fine = $hsh{fax_fine};
68        defined $fax_fine or $fax_fine = 1;
69        if (!i_writetiff_wiol_faxable($im->{IMG}, $io, $fax_fine)) {
70          $im->{ERRSTR} = Imager->_error_as_msg();
71          return undef;
72        }
73      }
74      else {
75        unless (i_writetiff_wiol($im->{IMG}, $io)) {
76          $im->_set_error(Imager->_error_as_msg);
77          return;
78        }
79      }
80      return $im;
81    },
82    multiple =>
83    sub {
84      my ($class, $io, $opts, @ims) = @_;
85
86      Imager->_set_opts($opts, "tiff_", @ims);
87      Imager->_set_opts($opts, "exif_", @ims);
88
89      my @work = map $_->{IMG}, @ims;
90      my $tiff_class = $opts->{class};
91      defined $tiff_class or $tiff_class = "";
92
93      my $result;
94      if ($tiff_class eq "fax") {
95        my $fax_fine = $opts->{fax_fine};
96        defined $fax_fine or $fax_fine = 1;
97        $result = i_writetiff_multi_wiol_faxable($io, $fax_fine, @work);
98      }
99      else {
100        $result = i_writetiff_multi_wiol($io, @work);
101      }
102      unless ($result) {
103        $class->_set_error($class->_error_as_msg);
104        return;
105      }
106
107      return 1;
108    },
109   );
110
111 __END__
112
113 =head1 NAME
114
115 Imager::File::TIFF - read and write TIFF files
116
117 =head1 SYNOPSIS
118
119   use Imager;
120
121   my $img = Imager->new;
122   $img->read(file=>"foo.tiff")
123     or die $img->errstr;
124
125   $img->write(file => "foo.tif")
126     or die $img->errstr;
127
128 =head1 DESCRIPTION
129
130 Imager's TIFF support is documented in L<Imager::Files>.
131
132 =head1 AUTHOR
133
134 Tony Cook <tony@imager.perl.org>
135
136 =head1 SEE ALSO
137
138 Imager, Imager::Files.
139
140 =cut