[146e87]: bin / gpano2pto  Maximize  Restore  History

Download this file

90 lines (66 with data), 2.9 kB

#!/usr/bin/perl
use strict;
use warnings;
use Panotools::Script;
use Panotools::Script::Line::Image;
use Image::ExifTool;
use File::Spec;
use Pod::Usage;

pod2usage (2) unless (scalar @ARGV);

for my $path_jpeg (@ARGV)
{
    print "JPEG file: $path_jpeg\n";

    my $exiftool = new Image::ExifTool;
    $exiftool->Options (PrintConv => 0);
    my $imageinfo = $exiftool->ImageInfo ($path_jpeg);
    unless (defined $imageinfo->{ProjectionType} and $imageinfo->{ProjectionType} eq 'equirectangular')
    {
        print "Skipping: Incomplete XMP GPano tags\n"; next;
    }
    my $hfov = 360 * $imageinfo->{CroppedAreaImageWidthPixels} / $imageinfo->{FullPanoWidthPixels};
    my $vfov = 180 * $imageinfo->{CroppedAreaImageHeightPixels} / $imageinfo->{FullPanoHeightPixels};
    my $e = $imageinfo->{CroppedAreaTopPixels} + (($imageinfo->{CroppedAreaImageHeightPixels} - $imageinfo->{FullPanoHeightPixels}) / 2);

    my $path_pto = $path_jpeg;
    $path_pto =~ s/\.jpg/_remap.pto/i;
    my $pto = new Panotools::Script;
    $pto->Panorama->{f} = 19; #pannini general
    $pto->Panorama->{v} = $hfov;
    $pto->Panorama->{w} = $imageinfo->{CroppedAreaImageWidthPixels};
    $pto->Panorama->{h} = $imageinfo->{CroppedAreaImageHeightPixels} + abs ($e * 2);
    $pto->Panorama->{n} = "\"JPEG q90\"";
    $pto->Option->{outputImageType} = 'jpg';
    $pto->Option->{outputJPEGQuality} = 90;

    $pto->Image->[0] = new Panotools::Script::Line::Image;
    $pto->Image->[0]->{f} = 4; # equirectangular
    $pto->Image->[0]->{v} = $hfov;
    $pto->Image->[0]->{w} = $imageinfo->{CroppedAreaImageWidthPixels};
    $pto->Image->[0]->{h} = $imageinfo->{CroppedAreaImageHeightPixels};
    $pto->Image->[0]->{e} = 0 - $e;
    $pto->Image->[0]->{n} = "\"$path_jpeg\"";

    $pto->Write ($path_pto);
}

__END__

=head1 NAME

gpano2pto - Insert a Google photosphere into a Hugin project

=head1 SYNOPSIS

gpano2pto /path/to/PANO_20140225_134632.jpg /path/to/PANO_20140225_134812.jpg [...]

Options: None.

=head1 DESCRIPTION

B<gpano2pto> is a simple tool that reads GPano XMP tags in JPEG panorama files,
calculates the field of view and crop offsets, and creates Hugin .pto projects
with the photograph inserted correctly.

This allows further processing of panoramas such as levelling, changing
projection, and cropping.

Note that partial panoramas are supported.  So this tool does the right thing
with panoramas less than 360 degrees, and with panoramas that have horizon
lines above or below the middle of the image.

=head1 LICENSE

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

=head1 SEE ALSO

L<http://hugin.sourceforge.net/>

=head1 AUTHOR

Bruno Postle - March 2014.

=cut

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:

JavaScript is required for this form.





No, thanks