if ($ex_version < 5.57) {
@ISA = qw(Exporter);
}
- $VERSION = '1.001';
+ $VERSION = '1.004';
require XSLoader;
XSLoader::load(Imager => $VERSION);
}
$self->{ERRSTR}=undef; #
$self->{DEBUG}=$DEBUG;
$self->{DEBUG} and print "Initialized Imager\n";
- if (defined $hsh{xsize} || defined $hsh{ysize}) {
- unless ($self->img_set(%hsh)) {
- $Imager::ERRSTR = $self->{ERRSTR};
- return;
- }
- }
- elsif (defined $hsh{file} ||
- defined $hsh{fh} ||
- defined $hsh{fd} ||
- defined $hsh{callback} ||
- defined $hsh{readcb} ||
- defined $hsh{data}) {
+ if (defined $hsh{file} ||
+ defined $hsh{fh} ||
+ defined $hsh{fd} ||
+ defined $hsh{callback} ||
+ defined $hsh{readcb} ||
+ defined $hsh{data} ||
+ defined $hsh{io}) {
# allow $img = Imager->new(file => $filename)
my %extras;
return;
}
}
+ elsif (defined $hsh{xsize} || defined $hsh{ysize}) {
+ unless ($self->img_set(%hsh)) {
+ $Imager::ERRSTR = $self->{ERRSTR};
+ return;
+ }
+ }
+ elsif (%hsh) {
+ Imager->_set_error("new: supply xsize and ysize or a file access parameter or no parameters");
+ return;
+ }
return $self;
}
# Sets an image to a certain size and channel number
# if there was previously data in the image it is discarded
+my %model_channels =
+ (
+ gray => 1,
+ graya => 2,
+ rgb => 3,
+ rgba => 4,
+ );
+
sub img_set {
my $self=shift;
my %hsh=(xsize=>100, ysize=>100, channels=>3, bits=>8, type=>'direct', @_);
- if (defined($self->{IMG})) {
- # let IIM_DESTROY destroy it, it's possible this image is
- # referenced from a virtual image (like masked)
- #i_img_destroy($self->{IMG});
- undef($self->{IMG});
+ undef($self->{IMG});
+
+ if ($hsh{model}) {
+ if (my $channels = $model_channels{$hsh{model}}) {
+ $hsh{channels} = $channels;
+ }
+ else {
+ $self->_set_error("new: unknown value for model '$hsh{model}'");
+ return;
+ }
}
if ($hsh{type} eq 'paletted' || $hsh{type} eq 'pseudo') {
}
unless ($self->{IMG}) {
- $self->{ERRSTR} = Imager->_error_as_msg();
+ $self->_set_error(Imager->_error_as_msg());
return;
}
return i_img_getchannels($self->{IMG});
}
+my @model_names = qw(unknown gray graya rgb rgba);
+
+sub colormodel {
+ my ($self, %opts) = @_;
+
+ $self->_valid_image("colormodel")
+ or return;
+
+ my $model = i_img_color_model($self->{IMG});
+
+ return $opts{numeric} ? $model : $model_names[$model];
+}
+
+sub colorchannels {
+ my ($self) = @_;
+
+ $self->_valid_image("colorchannels")
+ or return;
+
+ return i_img_color_channels($self->{IMG});
+}
+
+sub alphachannel {
+ my ($self) = @_;
+
+ $self->_valid_image("alphachannel")
+ or return;
+
+ return scalar(i_img_alpha_channel($self->{IMG}));
+}
+
# Get channel mask
sub getmask {
eval { require Imager::Font::W32 };
eval { require Imager::Font::FT2 };
eval { require Imager::Font::T1 };
+ eval { require Imager::Color::Table };
+
+ 1;
}
package Imager::IO;
align_string() - L<Imager::Draw/align_string()> - draw text aligned on a
point
+alphachannel() - L<Imager::ImageTypes/alphachannel()> - return the
+channel index of the alpha channel (if any).
+
arc() - L<Imager::Draw/arc()> - draw a filled arc
bits() - L<Imager::ImageTypes/bits()> - number of bits per sample for the
close_log() - L<Imager::ImageTypes/close_log()> - close the Imager
debugging log.
+colorchannels() - L<Imager::ImageTypes/colorchannels()> - the number
+of channels used for color.
+
colorcount() - L<Imager::ImageTypes/colorcount()> - the number of
colors in an image's palette (paletted images only)
+colormodel() - L<Imager::ImageTypes/colorcount()> - how color is
+represented.
+
combine() - L<Imager::Transformations/combine()> - combine channels
from one or more images.