CodeIgniter Forums
Automatic image rotation based on EXIF data - Printable Version

+- CodeIgniter Forums (https://forum.codeigniter.com)
+-- Forum: Archived Discussions (https://forum.codeigniter.com/forumdisplay.php?fid=20)
+--- Forum: Archived Libraries & Helpers (https://forum.codeigniter.com/forumdisplay.php?fid=22)
+--- Thread: Automatic image rotation based on EXIF data (/showthread.php?tid=55034)



Automatic image rotation based on EXIF data - El Forum - 10-06-2012

[eluser]TheCodee[/eluser]
The library automatically rotates the provided image based on the embedded EXIF data. I use it in my projects to correctly display images uploaded from mobile devices.

Code:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
* @file application/libraries/Image_autorotate.php
*/
class Image_autorotate
{
function __construct($params = NULL) {
  
  if (!is_array($params) || empty($params)) return FALSE;
  
  $filepath = $params['filepath'];
  $exif = @exif_read_data($filepath);
  
  if (empty($exif['Orientation'])) return FALSE;
  
  $CI =& get_instance();
  $CI->load->library('image_lib');
  
  $config['image_library'] = 'gd2';
  $config['source_image'] = $filepath;
  
  $oris = array();
  
  switch($exif['Orientation'])
  {
   case 1: // no need to perform any changes
   break;

   case 2: // horizontal flip
   $oris[] = 'hor';
   break;
                                
   case 3: // 180 rotate left
   $oris[] = '180';
   break;
                    
   case 4: // vertical flip
   $oris[] = 'ver';
   break;
                
   case 5: // vertical flip + 90 rotate right
   $oris[] = 'ver';
   $oris[] = '270';
   break;
                
   case 6: // 90 rotate right
   $oris[] = '270';
   break;
                
   case 7: // horizontal flip + 90 rotate right
   $oris[] = 'hor';
   $oris[] = '270';
   break;
                
   case 8: // 90 rotate left
   $oris[] = '90';
   break;
  
   default: break;
  }
  
  foreach ($oris as $ori) {
   $config['rotation_angle'] = $ori;
   $CI->image_lib->initialize($config);
   $CI->image_lib->rotate();
  }
}
}

// END class Image_autorotate

/* End of file Image_autorotate.php */
/* Location: ./application/libraries/Image_autorotate.php */

Usage example:
Code:
$imageinfo = $this->upload->data();
$full_path = $imageinfo['full_path'];

// check EXIF and autorotate if needed
$this->load->library('image_autorotate', array('filepath' => $full_path));

Inspired by this post on PHP.net (thanks to the author).


Automatic image rotation based on EXIF data - El Forum - 10-07-2012

[eluser]jmadsen[/eluser]
nice - I like simple, useful classes. You should consider posting to a github repo and/or composer to make it easier to bookmark and share


Automatic image rotation based on EXIF data - El Forum - 10-09-2012

[eluser]TheCodee[/eluser]
Thanks for feedback. It's certainly in my plans to share this on github, but as of the time being I'm pretty busy with my projects. I'm new to Codeigniter (and I absolutely love it) so I wanted to hear from other community members if anyone had the same issue with mobile devices and if the problem was supposed to be solved in some other way.


Automatic image rotation based on EXIF data - El Forum - 10-21-2012

[eluser]TheCodee[/eluser]
Here is a GitHub link as requested. Share and enjoy!
P.S. I was not able to update my original post with a link due to forum's restrictions.