From 2ec7183adb37f910f96b29ed148ca6ae2bc385b9 Mon Sep 17 00:00:00 2001 From: plegall Date: Sun, 1 Apr 2012 00:02:36 +0000 Subject: feature 2604: support rotation on derivatives git-svn-id: http://piwigo.org/svn/trunk@13843 68402e56-0260-453c-a942-63ccdbb3a9ee --- admin/include/functions_upload.inc.php | 7 +++++++ admin/include/image.class.php | 32 +++++++++++++++++++++++++++++--- 2 files changed, 36 insertions(+), 3 deletions(-) (limited to 'admin') diff --git a/admin/include/functions_upload.inc.php b/admin/include/functions_upload.inc.php index 2a5206c1b..19482ee02 100644 --- a/admin/include/functions_upload.inc.php +++ b/admin/include/functions_upload.inc.php @@ -269,6 +269,11 @@ SELECT } } + // we need to save the rotation angle in the database to compute + // width/height of "multisizes" + $rotation_angle = pwg_image::get_rotation_angle($file_path); + $rotation = pwg_image::get_rotation_code_from_angle($rotation_angle); + $file_infos = pwg_image_infos($file_path); if (isset($image_id)) @@ -280,6 +285,7 @@ SELECT 'height' => $file_infos['height'], 'md5sum' => $md5sum, 'added_by' => $user['id'], + 'rotation' => $rotation, ); if (isset($level)) @@ -307,6 +313,7 @@ SELECT 'height' => $file_infos['height'], 'md5sum' => $md5sum, 'added_by' => $user['id'], + 'rotation' => $rotation, ); if (isset($level)) diff --git a/admin/include/image.class.php b/admin/include/image.class.php index 30e62de1d..61b1ab277 100644 --- a/admin/include/image.class.php +++ b/admin/include/image.class.php @@ -238,7 +238,7 @@ class pwg_image return null; } - $rotation = null; + $rotation = 0; $exif = exif_read_data($source_filepath); @@ -262,6 +262,28 @@ class pwg_image return $rotation; } + static function get_rotation_code_from_angle($rotation_angle) + { + switch($rotation_angle) + { + case 0: return 0; + case 90: return 1; + case 180: return 2; + case 270: return 3; + } + } + + static function get_rotation_angle_from_code($rotation_code) + { + switch($rotation_code) + { + case 0: return 0; + case 1: return 90; + case 2: return 180; + case 3: return 270; + } + } + /** Returns a normalized convolution kernel for sharpening*/ static function get_sharpen_matrix($amount) { @@ -423,11 +445,15 @@ class image_imagick implements imageInterface function resize($width, $height) { $this->image->setInterlaceScheme(Imagick::INTERLACE_LINE); - if ($this->get_width()%2 == 0 && $this->get_height()%2 == 0 - && $this->get_width() > 3*$width) + + // TODO need to explain this condition + if ($this->get_width()%2 == 0 + && $this->get_height()%2 == 0 + && $this->get_width() > 3*$width) { $this->image->scaleImage($this->get_width()/2, $this->get_height()/2); } + return $this->image->resizeImage($width, $height, Imagick::FILTER_LANCZOS, 0.9); } -- cgit v1.2.3