Initial Commit

This commit is contained in:
Riley Schneider
2025-12-03 16:38:10 +01:00
parent c5e26bf594
commit b732d8d4b5
17680 changed files with 5977495 additions and 2 deletions

View File

@@ -0,0 +1,9 @@
package Imager::File::CUR;
use 5.006;
use strict;
our $VERSION = "1.000";
# all the work is done by Imager::File::ICO
use Imager::File::ICO;
1;

View File

@@ -0,0 +1,122 @@
package Imager::File::GIF;
use 5.006;
use strict;
use Imager;
BEGIN {
our $VERSION = "0.96";
require XSLoader;
XSLoader::load('Imager::File::GIF', $VERSION);
}
Imager->register_reader
(
type=>'gif',
single =>
sub {
my ($im, $io, %hsh) = @_;
if ($hsh{gif_consolidate}) {
if ($hsh{colors}) {
my $colors;
($im->{IMG}, $colors) =i_readgif_wiol( $io );
if ($colors) {
${ $hsh{colors} } = [ map { NC(@$_) } @$colors ];
}
}
else {
$im->{IMG} =i_readgif_wiol( $io );
}
}
else {
my $page = $hsh{page};
defined $page or $page = 0;
$im->{IMG} = i_readgif_single_wiol($io, $page);
unless ($im->{IMG}) {
$im->_set_error(Imager->_error_as_msg);
return;
}
if ($hsh{colors}) {
${ $hsh{colors} } = [ $im->getcolors ];
}
return $im;
}
},
multiple =>
sub {
my ($io, %hsh) = @_;
my @imgs = i_readgif_multi_wiol($io);
unless (@imgs) {
Imager->_set_error(Imager->_error_as_msg);
return;
}
return map bless({ IMG => $_, ERRSTR => undef }, "Imager"), @imgs;
},
);
Imager->register_writer
(
type=>'gif',
single =>
sub {
my ($im, $io, %hsh) = @_;
$im->_set_opts(\%hsh, "i_", $im);
$im->_set_opts(\%hsh, "gif_", $im);
unless (i_writegif_wiol($io, \%hsh, $im->{IMG})) {
$im->_set_error(Imager->_error_as_msg);
return;
}
return $im;
},
multiple =>
sub {
my ($class, $io, $opts, @ims) = @_;
Imager->_set_opts($opts, "gif_", @ims);
my @work = map $_->{IMG}, @ims;
unless (i_writegif_wiol($io, $opts, @work)) {
Imager->_set_error(Imager->_error_as_msg);
return;
}
return 1;
},
);
__END__
=head1 NAME
Imager::File::GIF - read and write GIF files
=head1 SYNOPSIS
use Imager;
my $img = Imager->new;
$img->read(file=>"foo.gif")
or die $img->errstr;
$img->write(file => "foo.gif")
or die $img->errstr;
=head1 DESCRIPTION
Imager's GIF support is documented in L<Imager::Files>.
=head1 AUTHOR
Tony Cook <tonyc@cpan.org>
=head1 SEE ALSO
Imager, Imager::Files.
=cut

View File

@@ -0,0 +1,176 @@
package Imager::File::ICO;
use 5.006;
use strict;
use Imager;
BEGIN {
our $VERSION = "0.07";
require XSLoader;
XSLoader::load('Imager::File::ICO', $VERSION);
}
Imager->register_reader
(
type=>'ico',
single =>
sub {
my ($im, $io, %hsh) = @_;
my $masked =
exists $hsh{ico_masked} ? $hsh{ico_masked} : 1;
my $alpha_masked =
exists $hsh{ico_alpha_masked} ? $hsh{ico_alpha_masked} : 0;
$im->{IMG} = i_readico_single($io, $hsh{page} || 0, $masked,
$alpha_masked);
unless ($im->{IMG}) {
$im->_set_error(Imager->_error_as_msg);
return;
}
return $im;
},
multiple =>
sub {
my ($io, %hsh) = @_;
my $masked =
exists $hsh{ico_masked} ? $hsh{ico_masked} : 1;
my @imgs = i_readico_multi($io, $masked);
unless (@imgs) {
Imager->_set_error(Imager->_error_as_msg);
return;
}
return map {
bless { IMG => $_, DEBUG => $Imager::DEBUG, ERRSTR => undef }, 'Imager'
} @imgs;
},
);
# the readers can read CUR files too
Imager->register_reader
(
type=>'cur',
single =>
sub {
my ($im, $io, %hsh) = @_;
my $masked =
exists $hsh{ico_masked} ? $hsh{ico_masked} : 1;
my $alpha_masked =
exists $hsh{ico_alpha_masked} ? $hsh{ico_alpha_masked} : 0;
$im->{IMG} = i_readico_single($io, $hsh{page} || 0, $masked,
$alpha_masked);
unless ($im->{IMG}) {
$im->_set_error(Imager->_error_as_msg);
return;
}
return $im;
},
multiple =>
sub {
my ($io, %hsh) = @_;
my $masked =
exists $hsh{ico_masked} ? $hsh{ico_masked} : 1;
my @imgs = i_readico_multi($io, $masked);
unless (@imgs) {
Imager->_set_error(Imager->_error_as_msg);
return;
}
return map {
bless { IMG => $_, DEBUG => $Imager::DEBUG, ERRSTR => undef }, 'Imager'
} @imgs;
},
);
Imager->register_writer
(
type=>'ico',
single =>
sub {
my ($im, $io, %hsh) = @_;
unless (i_writeico_wiol($io, $im->{IMG})) {
$im->_set_error(Imager->_error_as_msg);
return;
}
return $im;
},
multiple =>
sub {
my ($class, $io, $opts, @images) = @_;
if (!i_writeico_multi_wiol($io, map $_->{IMG}, @images)) {
Imager->_set_error(Imager->_error_as_msg);
return;
}
return 1;
},
);
Imager->register_writer
(
type=>'cur',
single =>
sub {
my ($im, $io, %hsh) = @_;
unless (i_writecur_wiol($io, $im->{IMG})) {
$im->_set_error(Imager->_error_as_msg);
return;
}
return $im;
},
multiple =>
sub {
my ($class, $io, $opts, @images) = @_;
if (!i_writecur_multi_wiol($io, map $_->{IMG}, @images)) {
Imager->_set_error(Imager->_error_as_msg);
return;
}
return 1;
},
);
1;
__END__
=head1 NAME
Imager::File::ICO - read MS Icon files
=head1 SYNOPSIS
use Imager;
my $img = Imager->new;
$img->read(file=>"foo.ico")
or die $img->errstr;
my @imgs = Imager->read_multi(file => "foo.ico")
or die Imager->errstr;
$img->write(file => "foo.ico")
or die $img->errstr;
Imager->write_multi({ file => "foo.ico" }, @imgs)
or die Imager->errstr;
=head1 DESCRIPTION
Imager's MS Icon support is documented in L<Imager::Files>.
=head1 AUTHOR
Tony Cook <tonyc@cpan.org>
=head1 SEE ALSO
Imager, Imager::Files.
=cut

View File

@@ -0,0 +1,82 @@
package Imager::File::JPEG;
use 5.006;
use strict;
use Imager;
BEGIN {
our $VERSION = "0.94";
require XSLoader;
XSLoader::load('Imager::File::JPEG', $VERSION);
}
Imager->register_reader
(
type=>'jpeg',
single =>
sub {
my ($im, $io, %hsh) = @_;
($im->{IMG},$im->{IPTCRAW}) = i_readjpeg_wiol( $io );
unless ($im->{IMG}) {
$im->_set_error(Imager->_error_as_msg);
return;
}
return $im;
},
);
Imager->register_writer
(
type=>'jpeg',
single =>
sub {
my ($im, $io, %hsh) = @_;
$im->_set_opts(\%hsh, "i_", $im);
$im->_set_opts(\%hsh, "jpeg_", $im);
$im->_set_opts(\%hsh, "exif_", $im);
my $quality = $hsh{jpegquality};
defined $quality or $quality = 75;
if ( !i_writejpeg_wiol($im->{IMG}, $io, $quality)) {
$im->_set_error(Imager->_error_as_msg);
return;
}
return $im;
},
);
__END__
=head1 NAME
Imager::File::JPEG - read and write JPEG files
=head1 SYNOPSIS
use Imager;
my $img = Imager->new;
$img->read(file=>"foo.jpg")
or die $img->errstr;
$img->write(file => "foo.jpg")
or die $img->errstr;
=head1 DESCRIPTION
Imager's JPEG support is documented in L<Imager::Files>.
=head1 AUTHOR
Tony Cook <tonyc@cpan.org>
=head1 SEE ALSO
Imager, Imager::Files.
=cut

View File

@@ -0,0 +1,79 @@
package Imager::File::PNG;
use 5.006;
use strict;
use Imager;
BEGIN {
our $VERSION = "0.95";
require XSLoader;
XSLoader::load('Imager::File::PNG', $VERSION);
}
Imager->register_reader
(
type=>'png',
single =>
sub {
my ($im, $io, %hsh) = @_;
my $flags = 0;
$hsh{png_ignore_benign_errors}
and $flags |= IMPNG_READ_IGNORE_BENIGN_ERRORS;
$im->{IMG} = i_readpng_wiol($io, $flags);
unless ($im->{IMG}) {
$im->_set_error(Imager->_error_as_msg);
return;
}
return $im;
},
);
Imager->register_writer
(
type=>'png',
single =>
sub {
my ($im, $io, %hsh) = @_;
$im->_set_opts(\%hsh, "i_", $im);
$im->_set_opts(\%hsh, "png_", $im);
unless (i_writepng_wiol($im->{IMG}, $io)) {
$im->_set_error(Imager->_error_as_msg);
return;
}
return $im;
},
);
__END__
=head1 NAME
Imager::File::PNG - read and write PNG files
=head1 SYNOPSIS
use Imager;
my $img = Imager->new;
$img->read(file=>"foo.png")
or die $img->errstr;
$img->write(file => "foo.png")
or die $img->errstr;
=head1 DESCRIPTION
Imager's PNG support is documented in L<Imager::Files>.
=head1 AUTHOR
Tony Cook <tonyc@cpan.org>
=head1 SEE ALSO
Imager, Imager::Files.
=cut

View File

@@ -0,0 +1,82 @@
package Imager::File::SGI;
use 5.006;
use strict;
use Imager;
BEGIN {
our $VERSION = "0.05";
require XSLoader;
XSLoader::load('Imager::File::SGI', $VERSION);
}
Imager->register_reader
(
type=>'sgi',
single =>
sub {
my ($im, $io, %hsh) = @_;
$im->{IMG} = i_readsgi_wiol($io, $hsh{page} || 0);
unless ($im->{IMG}) {
$im->_set_error(Imager->_error_as_msg);
return;
}
return $im;
},
);
Imager->register_writer
(
type=>'sgi',
single =>
sub {
my ($im, $io, %hsh) = @_;
$im->_set_opts(\%hsh, "i_", $im);
$im->_set_opts(\%hsh, "sgi_", $im);
unless (i_writesgi_wiol($io, $im->{IMG})) {
$im->_set_error(Imager->_error_as_msg);
return;
}
return $im;
},
);
__END__
=head1 NAME
Imager::File::ICO - read MS Icon files
=head1 SYNOPSIS
use Imager;
my $img = Imager->new;
$img->read(file=>"foo.ico")
or die $img->errstr;
my @imgs = Imager->read_multi(file => "foo.ico")
or die Imager->errstr;
$img->write(file => "foo.ico")
or die $img->errstr;
Imager->write_multi({ file => "foo.ico" }, @imgs)
or die Imager->errstr;
=head1 DESCRIPTION
Imager's MS Icon support is documented in L<Imager::Files>.
=head1 AUTHOR
Tony Cook <tonyc@cpan.org>
=head1 SEE ALSO
Imager, Imager::Files.
=cut

View File

@@ -0,0 +1,133 @@
package Imager::File::TIFF;
use 5.006;
use strict;
use Imager;
BEGIN {
our $VERSION = "0.92";
require XSLoader;
XSLoader::load('Imager::File::TIFF', $VERSION);
}
Imager->register_reader
(
type=>'tiff',
single =>
sub {
my ($im, $io, %hsh) = @_;
my $allow_incomplete = $hsh{allow_incomplete};
defined $allow_incomplete or $allow_incomplete = 0;
my $page = $hsh{page};
defined $page or $page = 0;
$im->{IMG} = i_readtiff_wiol($io, $allow_incomplete, $page);
unless ($im->{IMG}) {
$im->_set_error(Imager->_error_as_msg);
return;
}
return $im;
},
multiple =>
sub {
my ($io, %hsh) = @_;
my @imgs = i_readtiff_multi_wiol($io);
unless (@imgs) {
Imager->_set_error(Imager->_error_as_msg);
return;
}
return map bless({ IMG => $_, ERRSTR => undef }, "Imager"), @imgs;
},
);
Imager->register_writer
(
type=>'tiff',
single =>
sub {
my ($im, $io, %hsh) = @_;
$im->_set_opts(\%hsh, "i_", $im);
$im->_set_opts(\%hsh, "tiff_", $im);
$im->_set_opts(\%hsh, "exif_", $im);
if (defined $hsh{class} && $hsh{class} eq "fax") {
my $fax_fine = $hsh{fax_fine};
defined $fax_fine or $fax_fine = 1;
if (!i_writetiff_wiol_faxable($im->{IMG}, $io, $fax_fine)) {
$im->{ERRSTR} = Imager->_error_as_msg();
return undef;
}
}
else {
unless (i_writetiff_wiol($im->{IMG}, $io)) {
$im->_set_error(Imager->_error_as_msg);
return;
}
}
return $im;
},
multiple =>
sub {
my ($class, $io, $opts, @ims) = @_;
Imager->_set_opts($opts, "tiff_", @ims);
Imager->_set_opts($opts, "exif_", @ims);
my @work = map $_->{IMG}, @ims;
my $tiff_class = $opts->{class};
defined $tiff_class or $tiff_class = "";
my $result;
if ($tiff_class eq "fax") {
my $fax_fine = $opts->{fax_fine};
defined $fax_fine or $fax_fine = 1;
$result = i_writetiff_multi_wiol_faxable($io, $fax_fine, @work);
}
else {
$result = i_writetiff_multi_wiol($io, @work);
}
unless ($result) {
$class->_set_error($class->_error_as_msg);
return;
}
return 1;
},
);
__END__
=head1 NAME
Imager::File::TIFF - read and write TIFF files
=head1 SYNOPSIS
use Imager;
my $img = Imager->new;
$img->read(file=>"foo.tiff")
or die $img->errstr;
$img->write(file => "foo.tif")
or die $img->errstr;
=head1 DESCRIPTION
Imager's TIFF support is documented in L<Imager::Files>.
=head1 AUTHOR
Tony Cook <tonyc@cpan.org>
=head1 SEE ALSO
Imager, Imager::Files.
=cut