mirror of
https://github.com/Piwigo/Piwigo.git
synced 2026-07-20 08:33:03 +02:00
feature 2604: support rotation on derivatives
git-svn-id: http://piwigo.org/svn/trunk@13843 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
@@ -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))
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user