Image-QRCode-Effects

 view release on metacpan or  search on metacpan

META.yml  view on Meta::CPAN

  url: http://module-build.sourceforge.net/META-spec-v1.4.html
  version: 1.4
name: Image-QRCode-Effects
no_index:
  directory:
    - inc
    - t
requires:
  File::Slurp: 9999.19
  File::Temp: 0.22
  Image::Magick: 6
  Imager: 0.94
  Imager::QRCode: 0.033
  Params::Validate: 1.07
  Scalar::Util: 1.27
  perl: 5.6.0
resources:
  bugtracker: http://github.com/mcartmell/Image-QRCode-Effects/issues
  license: http://dev.perl.org/licenses/
  repository: http://github.com/mcartmell/Image-QRCode-Effects
version: 0.01

Makefile.PL  view on Meta::CPAN

tests 't/*.t';

resources (
   license    => 'http://dev.perl.org/licenses/',
   repository => 'http://github.com/mcartmell/Image-QRCode-Effects',
   bugtracker => 'http://github.com/mcartmell/Image-QRCode-Effects/issues',
);

requires (
	'File::Slurp' => 9999.19,
	'Image::Magick' => 6,
	'Imager' => 0.94,
	'Imager::QRCode' => 0.033,
	'File::Temp' => 0.22,
	'Params::Validate' => 1.07,
	'Scalar::Util' => 1.27
);

test_requires 'Test::More' => 0;

WriteAll;

lib/Image/QRCode/Effects.pm  view on Meta::CPAN

package Image::QRCode::Effects;

use 5.006;

use strict;
use warnings;

our $VERSION = '0.01';

use File::Slurp qw(write_file);
use Image::Magick;
use Imager;
use Imager::QRCode;
use File::Temp qw(tempfile);
use Params::Validate qw(:all);
use Scalar::Util qw(looks_like_number);

my $rx_colour = { regex => qr/^#[a-f\d]+$/i };
my $valid_size = { regex => qr/^\d+x\d+$/i };
my $num = { callbacks => { 'numeric' => sub { looks_like_number(shift) } } };
my $optional_num = { %$num, optional => 1 };

lib/Image/QRCode/Effects.pm  view on Meta::CPAN

      gradient_colour => { %$rx_colour, optional => 1 },
      size => { %$valid_size, default => '600x600' },
      wavelength => { %$num, default => 30 },
      amplitude => { %$num, default => 1.5 },
      corner_sigma => { %$num, default => 2.2 },
      corner_threshold => { regex => qr/^\d+%,\d+%$/, default => '42%,58%' },
      shadow_colour => { %$rx_colour, default => '#000000' },
      gradient_type => { regex => qr/^(normal|radial|plasma)$/, default => 'normal' },
  });

  my $im = Image::Magick->new;
  my $size = $p{size};

  my $file = $self->{file};
  if (!-f "$file") {
    die "Internal error: file $file has not been set";
  }

  # Resize the image, without smoothing
  $im->read($file);
  $im->Resize(geometry => $size, filter => 'Point');

lib/Image/QRCode/Effects.pm  view on Meta::CPAN

    }
  }
  elsif ($col = $p{colour}) {
    $fill = "xc:$col";
  }
  else {
    die "Colour required";
  }

  # create a blank image to fill
  my $white = Image::Magick->new;
  $white->Set(size => $size);
  $white->ReadImage('xc:white');

  # fill with the colour, masked with the barcode
  my $filled = Image::Magick->new;
  $filled->Set(size => $size);
  $filled->ReadImage($fill);
  $im->Negate();
  $white->Composite(image => $filled, mask => $im, color => 'white');

  # put the transparent stencil on top if we've got an inner shadow
  if ($inner_shadow) {
    $white->Composite(image => $inner_shadow);
  }

lib/Image/QRCode/Effects.pm  view on Meta::CPAN

=item C<corner_sigma> - Can be changed to adjust the 'roundedness' of the corners when C<round_corners = 1>. Default is 2.2

=item C<corner_threshold> - Can be changed to adjust the 'sharpness' of the corners when C<round_corners = 1>. Default is '42%,58%'.

=back

=head1 SEE ALSO

L<Imager::QRCode>

L<Image::Magick>

=head1 AUTHOR

Mike Cartmell, C<< <mcartmell at cpan.org> >>

=head1 LICENSE AND COPYRIGHT

Copyright (C) 2013 Mike Cartmell

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

t/write.t  view on Meta::CPAN

use strict;
use warnings;
use Image::QRCode::Effects;
use Image::Magick;
use Test::More;
use Cwd qw(abs_path);
use File::Basename qw(basename dirname);

my $tests = [
	{
		args => { wave => 1 },
		test_file => 'test_wave.jpg',
	},
	{

t/write.t  view on Meta::CPAN

    my %args      = %{ $test->{args} };
		my $test_name = basename($test->{test_file});
		my $test_file = "$img_dir/$test->{test_file}";
    my $image     = Image::QRCode::Effects->new(
        level => 'H',
        plot  => "test $test_name",
    );
    my $tmpfile = File::Temp->new(SUFFIX => '.jpg');
    $image->write( %args, outfile => $tmpfile);
		close $tmpfile;
		my $img1 = Image::Magick->new();
		$img1->Read($tmpfile->filename);
		my $img2 = Image::Magick->new();
		$img2->Read($test_file);
		my $difference=$img1->Compare(image=>$img2, metric=>'rmse');
		ok($difference->Get('error') < 0.1, $test_name);
}

done_testing();



( run in 0.415 second using v1.01-cache-2.11-cpan-beeb90c9504 )