Imager::Filter::ExifOrientation - Imager::ExifOrientation for Imager Filter


Imager-ExifOrientation documentation Contained in the Imager-ExifOrientation distribution.

Index


Code Index:

NAME

Top

Imager::Filter::ExifOrientation - Imager::ExifOrientation for Imager Filter

SYNOPSIS

Top

use file path

  use Imager;
  use Imager::Filter::ExifOrientation;

  my $img = Imager->new;
  $img->filter(
      type => 'exif_orientation',
      path => 'foo.jpg',
  );

use jpeg data

  use Imager;
  use Imager::Filter::ExifOrientation;

  my $jpeg_data = do {
      open my $fh, '<', 'foo.jpg';
      local $/;
      <$fh>;
  };
  $img->filter(
      type => 'exif_orientation',
      data => $jpeg_data,
  );

use exif hash

  use Imager;
  use Imager::Filter::ExifOrientation;
  use Image::ExifTool 'ImageInfo';

  my $exif  = ImageInfo('foo.jpg');
  $img->filter(
      type => 'exif_orientation',
      exif => $exif,
  );

use orientation number

  use Imager;
  use Imager::Filter::ExifOrientation;

  $img->filter(
      type        => 'exif_orientation',
      orientation => 1, # or 2..8
  );
  # orientation values
  # 1 => Horizontal (normal)
  # 2 => Mirror horizontal
  # 3 => Rotate 180 (rotate is too noisy)
  # 4 => Mirror vertical
  # 5 => Mirror horizontal and rotate 270 CW
  # 6 => Rotate 90 CW
  # 7 => Mirror horizontal and rotate 90 CW
  # 8 => Rotate 270 CW

AUTHOR

Top

Kazuhiro Osawa <yappo <at> shibuya <döt> pl>

SEE ALSO

Top

Imager, Imager::Filter, Image::ExifTool, Imager::ExifOrientation

LICENSE

Top

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


Imager-ExifOrientation documentation Contained in the Imager-ExifOrientation distribution.

package Imager::Filter::ExifOrientation;
use strict;
use warnings;
our $VERSION = '0.01';

use Carp;
use Imager::ExifOrientation;
use Image::ExifTool ();

Imager->register_filter(
    type     => 'exif_orientation',
    callsub  => \&exif_orientation,
    defaults => {
        path        => undef,
        exif        => undef,
        data        => undef,
        orientation => undef,
    },
    callseq  => ['image'],
);

sub exif_orientation {
    my %args = @_;

    my $orientation;

    if ($args{orientation}) {
        $orientation = $args{orientation};
    } else {
        my $exif;
        if ($args{exif}) {
            $exif = $args{exif};
            $orientation = Imager::ExifOrientation->get_orientation_by_exiftool($exif);
        } elsif ($args{data}) {
            $exif = Image::ExifTool::ImageInfo(\$args{data});
            $orientation = Imager::ExifOrientation->get_orientation_by_exiftool($exif);
        } elsif ($args{path}) {
            $exif = Image::ExifTool::ImageInfo($args{path});
            $orientation = Imager::ExifOrientation->get_orientation_by_exiftool($exif);
        } else {
            $orientation = $args{imager}->tags(name => 'exif_orientation');
            return unless defined $orientation; # there is no orientation information
        }
    }

    my $img = Imager::ExifOrientation->_rotate(
        $args{imager}, $orientation
    );

    $args{imager}->{IMG} = $img->{IMG};
}

1;
__END__