Image-Similar

 view release on metacpan or  search on metacpan

examples/gd.pl  view on Meta::CPAN

#!/home/ben/software/install/bin/perl
use warnings;
use strict;
use Image::Similar 'load_image';
use GD;
my $gd = GD::Image->newFromPng ("t/images/chess/chess-100.png");
my $is = load_image ($gd);

lib/Image/Similar.pod  view on Meta::CPAN

    


The return value is an Image::Similar object.

Using L<GD>:

    
    use Image::Similar 'load_image';
    use GD;
    my $gd = GD::Image->newFromPng ("t/images/chess/chess-100.png");
    my $is = load_image ($gd);


Using L<Image::Imlib2>:

    
    use Image::Similar 'load_image';
    use Image::Imlib2;
    my $imlib2 = Image::Imlib2->load ("t/images/chess/chess-100.png");
    my $is = load_image ($imlib2);

lib/Image/Similar.pod  view on Meta::CPAN

This is used in conjunction with L<Image::PNG::Libpng/png_compare>
(version 0.42 or later) to check that Image::Similar has correctly
read in the image, by writing out Image::Similar's internal data as a
PNG file.

=head2 load_image_gd

    
    use Image::Similar 'load_image';
    use GD;
    my $gd = GD::Image->newFromPng ("t/images/chess/chess-100.png");
    my $is = load_image ($gd);


This is the internal routine used by L</load_image> to load L<GD>
images.

=head2 load_image_imlib2

This is the internal routine used by L</load_image> to load
L<Image::Imlib2> images.

t/gd.t  view on Meta::CPAN

my $builder = Test::More->builder;
binmode $builder->output,         ":utf8";
binmode $builder->failure_output, ":utf8";
binmode $builder->todo_output,    ":utf8";
binmode STDOUT, ":encoding(utf8)";
binmode STDERR, ":encoding(utf8)";
eval "use GD;";
if ($@) {
    plan (skip_all => "GD not available: $@ error on loading");
}
my $chess100 = GD::Image->newFromPng ("$Bin/images/chess/chess-100.png");
my $is = load_image ($chess100);
ok ($is);
my $chess200 = GD::Image->newFromPng ("$Bin/images/chess/chess-200.png");
my $is200 = load_image ($chess200);
ok ($is200);
cmp_ok ($is->diff ($is200), '<', 0.1);
my $chess300 = GD::Image->newFromPng ("$Bin/images/chess/chess-300.png");
my $is300 = load_image ($chess300);
ok ($is300);
cmp_ok ($is->diff ($is300), '<', 0.1);
cmp_ok ($is200->diff ($is300), '<', 0.1);
my $lfile = "$Bin/../xt/lena-gercke.jpg";
if (-f $lfile) {
    my $lena = GD::Image->newFromJpeg ($lfile);
    my $img = load_image ($lena);
    for my $s (1..10) {
	my $size = $s * 100;
	my $lenax = GD::Image->newFromPng ("$Bin/images/lenagercke/lena-$size.png");
	my $imgx = load_image ($lenax);
	cmp_ok ($img->diff ($imgx), "<", 0.1, "$size of lena looks like original");
    }
    cmp_ok ($is->diff ($img), ">", 0.1,
	    "Lena Gercke doesn't look like a chessboard to me");
}
done_testing ();
exit;

utility/read-image.go  view on Meta::CPAN

		fmt.Printf("*")
	} else if grey < 0.8 {
		fmt.Printf(":")
	} else if grey < 0.9 {
		fmt.Printf(".")
	} else {
		fmt.Printf(" ")
	}
}

func (is ImageSignature) WritePng(fileName string) {

}

func (is ImageSignature) GetData(Image image.Image) {
	var i int = 0
	is.width = Image.Bounds().Max.Y - Image.Bounds().Min.Y + 1 
	is.height = Image.Bounds().Max.X - Image.Bounds().Min.X + 1 
	is.data = make([][]byte, is.height)
	for y := Image.Bounds().Min.Y; y < Image.Bounds().Max.Y; y++ {
		var j int = 0

utility/read-image.go  view on Meta::CPAN

				0.071 * float64(b))/float64(0xffff)
			is.data[i][j] = uint8(grey*256)
			j++
		}
		i++
	}
}

func makeSignature(Image image.Image) (is ImageSignature) {
	is.GetData(Image)
	is.WritePng("grey.png")
	return is
}

func readImage(name string) {
	jpeg, err := os.Open(name)
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error opening %s: %s\n",
			name, err)
		return
	}



( run in 0.430 second using v1.01-cache-2.11-cpan-0a6323c29d9 )