Added fixOrientation method which rotates the image based on EXIF data.
This commit is contained in:
parent
d80b477ab5
commit
2f86a6203a
|
@ -42,8 +42,7 @@ function ellipsis($str, $maxlen) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class for image manipulation
|
* Class for basic image manipulation
|
||||||
* Ideas: imagerotate, chunk_split(base64_encode())
|
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class OC_Image {
|
class OC_Image {
|
||||||
|
@ -200,6 +199,87 @@ class OC_Image {
|
||||||
return chunk_split(base64_encode(ob_get_clean()));
|
return chunk_split(base64_encode(ob_get_clean()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Fixes orientation based on EXIF data.
|
||||||
|
* @returns bool.
|
||||||
|
*/
|
||||||
|
public function fixOrientation() {
|
||||||
|
if(!is_resource(self::$resource)) {
|
||||||
|
OC_Log::write('core','OC_Image::fixOrientation() No image loaded.', OC_Log::DEBUG);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(is_null(self::$filepath) || !is_readable(self::$filepath)) {
|
||||||
|
OC_Log::write('core','OC_Image::fixOrientation() No readable file path set.', OC_Log::DEBUG);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$exif = exif_read_data(self::$filepath, 'IFD0');
|
||||||
|
if(!$exif) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(!isset($exif['Orientation'])) {
|
||||||
|
return true; // Nothing to fix
|
||||||
|
}
|
||||||
|
$o = $exif['Orientation'];
|
||||||
|
OC_Log::write('core','OC_Image::fixOrientation() Orientation: '.$o, OC_Log::DEBUG);
|
||||||
|
$rotate = 0;
|
||||||
|
$flip = false;
|
||||||
|
switch($o) {
|
||||||
|
case 1:
|
||||||
|
$rotate = 0;
|
||||||
|
$flip = false;
|
||||||
|
break;
|
||||||
|
case 2: // Not tested
|
||||||
|
$rotate = 0;
|
||||||
|
$flip = true;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
$rotate = 180;
|
||||||
|
$flip = false;
|
||||||
|
break;
|
||||||
|
case 4: // Not tested
|
||||||
|
$rotate = 180;
|
||||||
|
$flip = true;
|
||||||
|
break;
|
||||||
|
case 5: // Not tested
|
||||||
|
$rotate = 90;
|
||||||
|
$flip = true;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
//$rotate = 90;
|
||||||
|
$rotate = 270;
|
||||||
|
$flip = false;
|
||||||
|
break;
|
||||||
|
case 7: // Not tested
|
||||||
|
$rotate = 270;
|
||||||
|
$flip = true;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
$rotate = 270;
|
||||||
|
$flip = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if($rotate) {
|
||||||
|
$res = imagerotate(self::$resource, $rotate, -1);
|
||||||
|
if($res) {
|
||||||
|
if(imagealphablending($res, true)) {
|
||||||
|
if(imagesavealpha($res, true)) {
|
||||||
|
self::$resource = $res;
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
OC_Log::write('core','OC_Image::fixOrientation() Error during alphasaving.', OC_Log::DEBUG);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
OC_Log::write('core','OC_Image::fixOrientation() Error during alphablending.', OC_Log::DEBUG);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
OC_Log::write('core','OC_Image::fixOrientation() Error during oriention fixing.', OC_Log::DEBUG);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Loads an image from a local file, a base64 encoded string or a resource created by an imagecreate* function.
|
* @brief Loads an image from a local file, a base64 encoded string or a resource created by an imagecreate* function.
|
||||||
* @param $imageref The path to a local file, a base64 encoded string or a resource created by an imagecreate* function.
|
* @param $imageref The path to a local file, a base64 encoded string or a resource created by an imagecreate* function.
|
||||||
|
|
Loading…
Reference in New Issue