Panotools::Photos(3)

πŸ“¦
version 0.29 Β· 2 versions
, in fedora 43

πŸ’– Panotools::Photos πŸ’–

okay bestie, welcome to Panotools::Photos β€” a lil module from the User Contributed Perl Documentation corner of the perl universe. it's literally about photo sets. let's get into it ✨


🌸 NAME 🌸

Panotools::Photos β€” it's giving Photo sets. that's the whole vibe. πŸŽ€


✨ SYNOPSIS ✨

you use this thing to Query sets of photos. that's it, that's the job. πŸ’…


πŸ¦‹ DESCRIPTION πŸ¦‹

so a collection of photos? it has possibilities. it could be one or more panoramas, or it could be a bracketed set. that's the drama. 🎭

this module hands you some methods for describing groups of photos based on the metadata that's actually available. no cap. πŸ“Έ


πŸ‘‘ USAGE πŸ‘‘

make yourself a brand new object like so:

my $photos = new Panotools::Photos;

or alternatively, if you already have some filenames to hand over, do that instead:

my $photos = new Panotools::Photos ('DSC_0001.JPG', 'DSC_0002.JPG');

πŸŽ€ Paths πŸŽ€

add to the list of image filenames, or get the list of image filenames:

$photos->Paths ('DSC_0003.JPG', 'DSC_0004.JPG');
my @paths = $photos->Paths;

🧚 Stub 🧚

this one constructs a stub filename out of the names of the first and last images in the list:

my $stub = $photos->Stub;

e.g.

DSC_0001.JPG DSC_0002.JPG DSC_0003.JPG -> DSC_0001-DSC_0003

cute, right? πŸ₯°

🌈 Bracketed 🌈

query to discover if this is a likely bracketed set. i.e. is the total number of photos divisible by the number of different exposures:

&do_stuff if ($photos->Bracketed);

divisible?? slay. math ate. βž—βœ¨

πŸ’œ Layered πŸ’œ

query to discover if this is a layered set, i.e. there's a large exposure difference in the set, but it isn't bracketed:

&do_stuff if ($photos->Layered);

by default the threshold is 4, e.g. exposures varying between 2 and 1/2 seconds indicate layers. wanna vary that threshold? do it like so:

&do_stuff if ($photos->Layered (2));

πŸ“ Speeds πŸ“

get a list of exposure times, sorted with the longest exposure first:

@speeds = @{$photos->Speeds};

longest first, main character energy, obviously. πŸ‘‘

🌸 SplitInterval 🌸

given a set of photos, split it into one or more sets by looking at the variation of time interval between shots. e.g. typically the interval between shots in a panorama varies by less than 15 seconds. a variation greater than that indicates the start of the next panorama:

my @sets = $photos->SplitInterval (15);
⚠️ heads up bestie: sets with an average interval greater than 4x this variation are not considered panoramas at all and get discarded. bye. πŸ’€

🫢 AverageInterval 🫢

get the average time between shots:

$average = $photos->AverageInterval;

⭐ FOV FocalLength Rotation ⭐

get the Angle of View in degrees of the first photo:

$photos->FOV;

..or any other photo β€” -1 is last:

$photos->FOV (123);
returns undef if the FOV can't be calculated. it happens. πŸ™ˆ

πŸ’… Eev πŸ’…

get an EV value for a photo β€” this will be guessed from partial EXIF data:

$photos->Eev ($index);

πŸ¦‹ AverageRGB πŸ¦‹

find the mean average colour balance for all photos:

($red, $green, $blue) = $photos->AverageRGB;

and that's the whole page, periodt. πŸ’–βœ¨

perl v5.42.0 Β· 2025-07-25 Β· Panotools::Photos(3) β€” mwah, thanks for reading, ily, go shoot some panoramas πŸ«ΆπŸ“ΈπŸŒΈ

πŸ“¦ where this page comes from