File Coverage

blib/lib/Color/Similarity/RGB.pm
Criterion Covered Total %
statement 13 13 100.0
branch n/a
condition n/a
subroutine 5 5 100.0
pod 2 2 100.0
total 20 20 100.0


line stmt bran cond sub pod time code
1             package Color::Similarity::RGB;
2              
3             =head1 NAME
4              
5             Color::Similarity::RGB - compute color similarity using the RGB color space
6              
7             =head1 SYNOPSIS
8              
9             use Color::Similarity::RGB qw(distance rgb2rgb distance_rgb);
10             # the greater the distance, more different the colors
11             my $distance = distance( [ $r1, $g1, $b1 ], [ $r2, $g2, $b2 ] );
12              
13             =head1 DESCRIPTION
14              
15             Computes color similarity using the RGB color space and Euclidean
16             distance metric.
17              
18             =cut
19              
20 4     4   8283 use strict;
  4         17  
  4         141  
21 4     4   23 use base qw(Exporter);
  4         6  
  4         1138  
22              
23             our $VERSION = '0.01';
24             our @EXPORT_OK = qw(rgb2rgb distance distance_rgb);
25              
26             =head1 FUNCTIONS
27              
28             =head2 distance
29              
30             my $distance = distance( [ $r1, $g1, $b1 ], [ $r2, $g2, $b2 ] );
31              
32             Synonim for C, for consistency with other
33             C modules.
34              
35             =cut
36              
37             *distance = \&distance_rgb;
38              
39             =head2 rgb2rgb
40              
41             [ $r, $g, $b ] = rgb2rgb( $r, $g, $b );
42              
43             Silly "conversion" function, for consistency with other
44             C modules.
45              
46             =cut
47              
48             sub rgb2rgb {
49 3     3 1 6 my( $r, $g, $b ) = @_;
50              
51 3         19 return [ $r, $g, $b ];
52             }
53              
54             =head2 distance_rgb
55              
56             my $distance = distance_rgb( [ $r1, $g1, $b1 ], [ $r2, $b2, $b2 ] );
57              
58             Computes the Euclidean distance between two colors in the RGB color space.
59              
60             =cut
61              
62             sub distance_rgb {
63 6865     6865 1 3029759 my( $t1, $t2 ) = @_;
64 6865         11027 my( $r1, $g1, $b1 ) = @$t1;
65 6865         10441 my( $r2, $g2, $b2 ) = @$t2;
66              
67 6865         31885 return sqrt( ( $r2 - $r1 ) ** 2
68             + ( $g2 - $g1 ) ** 2
69             + ( $b2 - $b1 ) ** 2 );
70             }
71              
72             =head1 SEE ALSO
73              
74             L, L, L
75              
76             =head1 AUTHOR
77              
78             Mattia Barbon, C<< >>
79              
80             =head1 COPYRIGHT
81              
82             Copyright (C) 2007, Mattia Barbon
83              
84             This program is free software; you can redistribute it or modify it
85             under the same terms as Perl itself.
86              
87             =cut
88              
89             sub _vtable {
90 1     1   11 return { distance_rgb => \&distance_rgb,
91             convert_rgb => \&rgb2rgb,
92             distance => \&distance_rgb,
93             };
94             }
95              
96             1;