Acme-DreamyImage
view release on metacpan or search on metacpan
lib/Acme/DreamyImage.pm view on Meta::CPAN
$upper_bound ||= 1;
$self->{pos} = 0 unless defined($self->{pos});
my $value = substr($self->{seed}, $self->{pos}, 1);
$self->{pos} += 1;
$self->{pos} = 0 if $self->{pos} >= length($self->{seed});
return int(hex($value) / 15 * $upper_bound);
}
sub random_color {
return [map { $self->random(255) } 1..4]
}
my @types = Imager->combines;
sub random_combine_type {
my $i = $self->random( 0+ @types );
return $types[$i];
}
sub random_background {
my $image = Imager->new(xsize => $self->width, ysize => $self->height, channels => 3);
$image->box(filled => 1, color => [255, 255, 255]);
$image->filter(type => "gradgen",
xo => [map { $self->random($self->width) } 1..2],
yo => [map { $self->random($self->height) } 1..2],
colors => [ map { $self->random_color } 1..2 ]);
$image->filter(type => "noise", subtype => 0, amount => $self->random(10));
$image->filter(type => "gaussian", stddev => $self->random( ($self->width + $self->height) / 2 * 0.03 ));
return $image;
}
sub new_layer {
my ($xsize, $ysize, $cb) = @_;
my $layer = Imager->new(xsize => $xsize, ysize => $ysize, channels => 4);
lib/Acme/DreamyImage.pm view on Meta::CPAN
$image->compose(src => $layer, tx => 0, ty => 0, combine => 'add');
}
) if $self->random(6) > 2;
# Big Blur Circles
new_layer(
$xsize, $ysize,
sub {
my ($layer) = @_;
$layer->filter(type => "noise", subtype => 0, amout => 20);
for my $size (map { ($xsize + $ysize) / 16 + $_ } 1..20) {
my ($x, $y) = ($self->random($xsize), $self->random($ysize));
$layer->circle(fill => { solid => [255, 255, 255, $self->random(30) + 10], combine => "add" }, x => $x, y => $y, r => $size);
}
$layer->filter(type => "gaussian", stddev => $self->random(30));
$image->compose(src => $layer, tx => 0, ty => 0, combine => $self->random_combine_type);
}
);
# Big Blur Boxes
new_layer(
$xsize, $ysize,
sub {
my ($layer) = @_;
for my $size (map { ($xsize + $ysize) / 16 + $_ } 1..20) {
my ($x, $y) = ($self->random($xsize), $self->random($ysize));
$layer->box(fill => { solid => [255, 255, 255, $self->random(30) + 10], combine => "add" },
xmin => $x, ymin => $y,
xmax => $x + $size, ymax => $y + $size);
}
$layer->filter(type => "noise", amount => $self->random(($xsize + $ysize) /2 * 0.03 ), subtype => 1);
$layer->filter(type => "gaussian", stddev => $self->random(30));
$image->compose(src => $layer, tx => 0, ty => 0, combine => $self->random_combine_type);
}
);
new_layer(
$xsize, $ysize,
sub {
my ($layer) = @_;
for (0..$self->random(48)) {
my @points = map {[ $self->random($xsize), $self->random($ysize) ]} 1 ... $self->random(40);
if ($self->random(6) > 2) {
$layer->polygon( points => \@points, color => $self->random_color );
} else {
$layer->polyline( points => \@points, color => $self->random_color, aa => 1 );
}
}
$layer->filter(type => "noise", amount => $self->random(($xsize + $ysize) /2 * 0.03 ), subtype => 1);
$layer->filter(type => "gaussian", stddev => $self->random(30));
$image->compose(src => $layer, tx => 0, ty => 0, combine => $self->random_combine_type);
}
xt/01_podspell.t view on Meta::CPAN
use Test::More;
eval q{ use Test::Spelling };
plan skip_all => "Test::Spelling is not installed." if $@;
set_spell_cmd("ispell -l");
add_stopwords(map { split /[\s\:\-]/ } <DATA>);
$ENV{LANG} = 'C';
all_pod_files_spelling_ok('lib');
__DATA__
Kang-min Liu
gugod@gugod.org
Acme::DreamyImage
( run in 0.918 second using v1.01-cache-2.11-cpan-49f99fa48dc )