diff options
author | Florian Pritz <bluewind@xinu.at> | 2014-09-19 10:45:56 +0200 |
---|---|---|
committer | Florian Pritz <bluewind@xinu.at> | 2014-09-20 19:31:42 +0200 |
commit | 28129a9e8fbf8a0298585b1344b047a8eb2c68f4 (patch) | |
tree | 6c39b4eba7008a3e6ac0f7e7df5a7676bcf155c9 | |
parent | e48be5ef7c6b73e51ab297c55950180261b6c061 (diff) |
thumbnails: Handle EXIF orientation
Signed-off-by: Florian Pritz <bluewind@xinu.at>
-rw-r--r-- | application/models/mfile.php | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/application/models/mfile.php b/application/models/mfile.php index 1f5409ec3..c4d2c6e68 100644 --- a/application/models/mfile.php +++ b/application/models/mfile.php @@ -184,6 +184,48 @@ class Mfile extends CI_Model { $target_width, $target_height ); + /* + * Fix orientation according to exif tag + */ + try { + $exif = exif_read_data($source_path); + } catch (ErrorException $e) { + } + + if (isset($exif['Orientation'])) { + $mirror = false; + $deg = 0; + + switch ($exif['Orientation']) { + case 2: + $mirror = true; + break; + case 3: + $deg = 180; + break; + case 4: + $deg = 180; + $mirror = true; + break; + case 5: + $deg = 270; + $mirror = true; + break; + case 6: + $deg = 270; + break; + case 7: + $deg = 90; + $mirror = true; + break; + case 8: + $deg = 90; + break; + } + if ($deg) $thumb = imagerotate($thumb, $deg, 0); + if ($mirror) $thumb = $this->_mirrorImage($thumb); + } + ob_start(); switch ($target_type) { case IMAGETYPE_GIF: @@ -211,6 +253,27 @@ class Mfile extends CI_Model { return $result; } + function _mirrorImage($imgsrc) + { + $width = imagesx($imgsrc); + $height = imagesy($imgsrc); + + $src_x = $width -1; + $src_y = 0; + $src_width = -$width; + $src_height = $height; + + $imgdest = imagecreatetruecolor($width, $height); + imagealphablending($imgdest,false); + imagesavealpha($imgdest,true); + + if (imagecopyresampled($imgdest, $imgsrc, 0, 0, $src_x, $src_y, $width, $height, $src_width, $src_height)) { + return $imgdest; + } + + return $imgsrc; + } + // Add a hash to the DB function add_file($hash, $id, $filename) { |