Own function for "Set orientation based on EXIF data" > adjustFile
This commit is contained in:
parent
adf1dee2ea
commit
25a7e835dd
@ -14,6 +14,9 @@ class Photo extends Module {
|
|||||||
private $settings = null;
|
private $settings = null;
|
||||||
private $photoIDs = null;
|
private $photoIDs = null;
|
||||||
|
|
||||||
|
private $uploadsBig = null;
|
||||||
|
private $uploadsThumb = null;
|
||||||
|
|
||||||
public function __construct($database, $plugins, $settings, $photoIDs) {
|
public function __construct($database, $plugins, $settings, $photoIDs) {
|
||||||
|
|
||||||
# Init vars
|
# Init vars
|
||||||
@ -22,6 +25,10 @@ class Photo extends Module {
|
|||||||
$this->settings = $settings;
|
$this->settings = $settings;
|
||||||
$this->photoIDs = $photoIDs;
|
$this->photoIDs = $photoIDs;
|
||||||
|
|
||||||
|
# Set upload dirs
|
||||||
|
$this->uploadsBig = __DIR__ . '/../../uploads/big/';
|
||||||
|
$this->uploadsThumb = __DIR__ . '/../../uploads/thumb/';
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -70,7 +77,7 @@ class Photo extends Module {
|
|||||||
$extension = array_reverse(explode('.', $file['name']));
|
$extension = array_reverse(explode('.', $file['name']));
|
||||||
$extension = $extension[0];
|
$extension = $extension[0];
|
||||||
$photo_name = md5($id) . ".$extension";
|
$photo_name = md5($id) . ".$extension";
|
||||||
$path = __DIR__ . '/../../uploads/big/' . $photo_name;
|
$path = $this->uploadsBig . $photo_name;
|
||||||
|
|
||||||
# Import if not uploaded via web
|
# Import if not uploaded via web
|
||||||
if (!is_uploaded_file($tmp_name)) {
|
if (!is_uploaded_file($tmp_name)) {
|
||||||
@ -90,94 +97,7 @@ class Photo extends Module {
|
|||||||
|
|
||||||
# Set orientation based on EXIF data
|
# Set orientation based on EXIF data
|
||||||
if ($file['type']==='image/jpeg'&&isset($info['orientation'])&&$info['orientation']!==''&&isset($info['width'])&&isset($info['height'])) {
|
if ($file['type']==='image/jpeg'&&isset($info['orientation'])&&$info['orientation']!==''&&isset($info['width'])&&isset($info['height'])) {
|
||||||
|
if (!$this->adjustFile($path, $info)) return false;
|
||||||
if(extension_loaded('imagick')) {
|
|
||||||
|
|
||||||
$rotateImage = 0;
|
|
||||||
|
|
||||||
switch ($info['orientation']) {
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
$rotateImage = 180;
|
|
||||||
$imageOrientation = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 6:
|
|
||||||
$rotateImage = 90;
|
|
||||||
$imageOrientation = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 8:
|
|
||||||
$rotateImage = 270;
|
|
||||||
$imageOrientation = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($rotateImage) {
|
|
||||||
$image = new Imagick();
|
|
||||||
$image->readImage(__DIR__ . '/../../uploads/big/' . $photo_name);
|
|
||||||
$image->rotateImage(new ImagickPixel(), $rotateImage);
|
|
||||||
$image->setImageOrientation($imageOrientation);
|
|
||||||
$image->writeImage(__DIR__ . '/../../uploads/big/' . $photo_name);
|
|
||||||
$image->clear();
|
|
||||||
$image->destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
$newWidth = $info['width'];
|
|
||||||
$newHeight = $info['height'];
|
|
||||||
|
|
||||||
$sourceImg = imagecreatefromjpeg(__DIR__ . "/../../uploads/big/$photo_name");
|
|
||||||
|
|
||||||
switch ($info['orientation']) {
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
# mirror
|
|
||||||
# not yet implemented
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
$sourceImg = imagerotate($sourceImg, -180, 0);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4:
|
|
||||||
# rotate 180 and mirror
|
|
||||||
# not yet implemented
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 5:
|
|
||||||
# rotate 90 and mirror
|
|
||||||
# not yet implemented
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 6:
|
|
||||||
$sourceImg = imagerotate($sourceImg, -90, 0);
|
|
||||||
$newWidth = $info['height'];
|
|
||||||
$newHeight = $info['width'];
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 7:
|
|
||||||
# rotate -90 and mirror
|
|
||||||
# not yet implemented
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 8:
|
|
||||||
$sourceImg = imagerotate($sourceImg, 90, 0);
|
|
||||||
$newWidth = $info['height'];
|
|
||||||
$newHeight = $info['width'];
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
$newSourceImg = imagecreatetruecolor($newWidth, $newHeight);
|
|
||||||
|
|
||||||
imagecopyresampled($newSourceImg, $sourceImg, 0, 0, 0, 0, $newWidth, $newHeight, $newWidth, $newHeight);
|
|
||||||
imagejpeg($newSourceImg, __DIR__ . '/../../uploads/big/' . $photo_name, 100);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Create Thumb
|
# Create Thumb
|
||||||
@ -221,15 +141,15 @@ class Photo extends Module {
|
|||||||
|
|
||||||
private function createThumb($url, $filename, $width = 200, $height = 200) {
|
private function createThumb($url, $filename, $width = 200, $height = 200) {
|
||||||
|
|
||||||
if (!isset($this->settings)) return false;
|
if (!isset($this->settings, $url, $filename)) return false;
|
||||||
|
|
||||||
# Call plugins
|
# Call plugins
|
||||||
$this->plugins(__METHOD__, 0, func_get_args());
|
$this->plugins(__METHOD__, 0, func_get_args());
|
||||||
|
|
||||||
$info = getimagesize($url);
|
$info = getimagesize($url);
|
||||||
$photoName = explode(".", $filename);
|
$photoName = explode(".", $filename);
|
||||||
$newUrl = __DIR__ . '/../../uploads/thumb/' . $photoName[0] . '.jpeg';
|
$newUrl = $this->uploadsThumb . $photoName[0] . '.jpeg';
|
||||||
$newUrl2x = __DIR__ . '/../../uploads/thumb/' . $photoName[0] . '@2x.jpeg';
|
$newUrl2x = $this->uploadsThumb . $photoName[0] . '@2x.jpeg';
|
||||||
|
|
||||||
# create thumbnails with Imagick
|
# create thumbnails with Imagick
|
||||||
if(extension_loaded('imagick')) {
|
if(extension_loaded('imagick')) {
|
||||||
@ -301,6 +221,107 @@ class Photo extends Module {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function adjustFile($path, $info) {
|
||||||
|
|
||||||
|
if (!isset($path, $info)) return false;
|
||||||
|
|
||||||
|
# Call plugins
|
||||||
|
$this->plugins(__METHOD__, 0, func_get_args());
|
||||||
|
|
||||||
|
if (extension_loaded('imagick')) {
|
||||||
|
|
||||||
|
$rotateImage = 0;
|
||||||
|
|
||||||
|
switch ($info['orientation']) {
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
$rotateImage = 180;
|
||||||
|
$imageOrientation = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 6:
|
||||||
|
$rotateImage = 90;
|
||||||
|
$imageOrientation = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 8:
|
||||||
|
$rotateImage = 270;
|
||||||
|
$imageOrientation = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($rotateImage) {
|
||||||
|
$image = new Imagick();
|
||||||
|
$image->readImage($path);
|
||||||
|
$image->rotateImage(new ImagickPixel(), $rotateImage);
|
||||||
|
$image->setImageOrientation($imageOrientation);
|
||||||
|
$image->writeImage($path);
|
||||||
|
$image->clear();
|
||||||
|
$image->destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$newWidth = $info['width'];
|
||||||
|
$newHeight = $info['height'];
|
||||||
|
|
||||||
|
$sourceImg = imagecreatefromjpeg($path);
|
||||||
|
|
||||||
|
switch ($info['orientation']) {
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
# mirror
|
||||||
|
# not yet implemented
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
$sourceImg = imagerotate($sourceImg, -180, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
# rotate 180 and mirror
|
||||||
|
# not yet implemented
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5:
|
||||||
|
# rotate 90 and mirror
|
||||||
|
# not yet implemented
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 6:
|
||||||
|
$sourceImg = imagerotate($sourceImg, -90, 0);
|
||||||
|
$newWidth = $info['height'];
|
||||||
|
$newHeight = $info['width'];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 7:
|
||||||
|
# rotate -90 and mirror
|
||||||
|
# not yet implemented
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 8:
|
||||||
|
$sourceImg = imagerotate($sourceImg, 90, 0);
|
||||||
|
$newWidth = $info['height'];
|
||||||
|
$newHeight = $info['width'];
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$newSourceImg = imagecreatetruecolor($newWidth, $newHeight);
|
||||||
|
|
||||||
|
imagecopyresampled($newSourceImg, $sourceImg, 0, 0, 0, 0, $newWidth, $newHeight, $newWidth, $newHeight);
|
||||||
|
imagejpeg($newSourceImg, $path, 100);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# Call plugins
|
||||||
|
$this->plugins(__METHOD__, 1, func_get_args());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public function get($albumID) {
|
public function get($albumID) {
|
||||||
|
|
||||||
if (!isset($this->database, $this->photoIDs)) return false;
|
if (!isset($this->database, $this->photoIDs)) return false;
|
||||||
@ -454,10 +475,10 @@ class Photo extends Module {
|
|||||||
# Set headers
|
# Set headers
|
||||||
header("Content-Type: application/octet-stream");
|
header("Content-Type: application/octet-stream");
|
||||||
header("Content-Disposition: attachment; filename=\"$photo->title.$extension[0]\"");
|
header("Content-Disposition: attachment; filename=\"$photo->title.$extension[0]\"");
|
||||||
header("Content-Length: " . filesize(__DIR__ . '/../../uploads/big/' . $photo->url));
|
header("Content-Length: " . filesize($this->uploadsBig . $photo->url));
|
||||||
|
|
||||||
# Send file
|
# Send file
|
||||||
readfile(__DIR__ . '/../../uploads/big/' . $photo->url);
|
readfile($this->uploadsBig . $photo->url);
|
||||||
|
|
||||||
# Call plugins
|
# Call plugins
|
||||||
$this->plugins(__METHOD__, 1, func_get_args());
|
$this->plugins(__METHOD__, 1, func_get_args());
|
||||||
@ -653,9 +674,9 @@ class Photo extends Module {
|
|||||||
$thumbUrl2x = $thumbUrl2x[0] . '@2x.' . $thumbUrl2x[1];
|
$thumbUrl2x = $thumbUrl2x[0] . '@2x.' . $thumbUrl2x[1];
|
||||||
|
|
||||||
# Delete files
|
# Delete files
|
||||||
if (!unlink(__DIR__ . '/../../uploads/big/' . $photo->url)) return false;
|
if (!unlink($this->uploadsBig . $photo->url)) return false;
|
||||||
if (!unlink(__DIR__ . '/../../uploads/thumb/' . $photo->thumbUrl)) return false;
|
if (!unlink($this->uploadsThumb . $photo->thumbUrl)) return false;
|
||||||
if (!unlink(__DIR__ . '/../../uploads/thumb/' . $thumbUrl2x)) return false;
|
if (!unlink($this->uploadsThumb . $thumbUrl2x)) return false;
|
||||||
|
|
||||||
# Delete db entry
|
# Delete db entry
|
||||||
$delete = $this->database->query("DELETE FROM lychee_photos WHERE id = '$photo->id';");
|
$delete = $this->database->query("DELETE FROM lychee_photos WHERE id = '$photo->id';");
|
||||||
|
Loading…
Reference in New Issue
Block a user