CSS-SpriteBuilder
view release on metacpan or search on metacpan
lib/CSS/SpriteBuilder/ImageDriver/GD.pm view on Meta::CPAN
} <DATA>;
# Use truecolor by default
GD::Image->trueColor(1);
sub driver { 'GD' }
sub width { $_[0]->{_image} ? $_[0]->{_image}->width() : 0 }
sub height { $_[0]->{_image} ? $_[0]->{_image}->height() : 0 }
sub reset {
my ($self, $image) = @_;
$self->{_image} = $image ? $image->{_image}->clone() : undef;
return;
}
sub read {
my ($self, $filename) = @_;
$self->{_image} = GD::Image->new($filename)
or die "Failed to read image from '$filename' due: $!";
$self->{_image}->alphaBlending(0);
$self->{_image}->saveAlpha(1);
return;
}
sub write {
my ($self, $filename) = @_;
return unless $self->{_image};
if ($filename =~ /\.(png|jpg|gif)$/i) {
my $ext = lc $1;
my $data;
if ($ext eq 'png') {
$data = $self->{_image}->png();
}
elsif ($ext eq 'jpg') {
$data = $self->{_image}->jpeg( $self->{_quality} );
}
else {
$data = $self->{_image}->gif();
}
die "Failed to write image due: $!" unless $data;
open(my $fh, '>', $filename) or die "Failed to open file '$filename' due: $!";
binmode $fh;
print $fh $data;
close $fh or die "Failed to close file '$filename' due: $!";
}
else {
die "Unknown extension of the file '$filename'";
}
return;
}
sub set_transparent_color {
my ($self, $color) = @_;
return unless $self->{_image};
my $rgb = $COLOR_MAP{ lc $color } or die "Unknown color '$color'";
my $index = $self->{_image}->colorClosest(@$rgb);
$self->{_image}->transparent($index);
return;
}
sub extent {
my ($self, $width, $height) = @_;
my $old_image = $self->{_image};
my $new_image = GD::Image->new($width, $height, 1);
$new_image->alphaBlending(0);
$new_image->saveAlpha(1);
$new_image->copy( $old_image, 0, 0, 0, 0, $old_image->width(), $old_image->height() )
if $old_image;
$self->{_image} = $new_image;
return;
}
sub composite {
my ($self, $image, $x, $y) = @_;
$self->{_image}->copy( $image->{_image}, $x, $y, 0, 0, $image->width(), $image->height() );
return;
}
1;
__DATA__
white FF FF FF
black 00 00 00
aliceblue F0 F8 FF
antiquewhite FA EB D7
aqua 00 FF FF
aquamarine 7F FF D4
azure F0 FF FF
beige F5 F5 DC
bisque FF E4 C4
blanchedalmond FF EB CD
blue 00 00 FF
blueviolet 8A 2B E2
brown A5 2A 2A
burlywood DE B8 87
cadetblue 5F 9E A0
chartreuse 7F FF 00
chocolate D2 69 1E
coral FF 7F 50
cornflowerblue 64 95 ED
cornsilk FF F8 DC
crimson DC 14 3C
cyan 00 FF FF
darkblue 00 00 8B
darkcyan 00 8B 8B
darkgoldenrod B8 86 0B
darkgray A9 A9 A9
darkgreen 00 64 00
darkkhaki BD B7 6B
darkmagenta 8B 00 8B
( run in 2.037 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )