From cf9dc0ec2fc055cbc845328f626d0cebe48c7de3 Mon Sep 17 00:00:00 2001 From: Tobias Reich Date: Sat, 12 Apr 2014 00:30:26 +0200 Subject: [PATCH] Moved upload and more to Photo --- php/access/admin.php | 23 +-- php/access/guest.php | 4 +- php/modules/Album.php | 2 +- php/modules/Photo.php | 372 ++++++++++++++++++++++++++++++++++++++++- php/modules/upload.php | 352 -------------------------------------- 5 files changed, 386 insertions(+), 367 deletions(-) diff --git a/php/access/admin.php b/php/access/admin.php index c929109..28b8caa 100644 --- a/php/access/admin.php +++ b/php/access/admin.php @@ -55,49 +55,50 @@ switch ($_POST['function']) { // Photo Functions case 'getPhoto': if (!isset($_POST['photoID'], $_POST['albumID'])) exit(); - $photo = new Photo($database, $plugins, $_POST['photoID']); + $photo = new Photo($database, $plugins, null, $_POST['photoID']); echo json_encode($photo->get($_POST['albumID'])); break; case 'setPhotoTitle': if (!isset($_POST['photoIDs'], $_POST['title'])) exit(); - $photo = new Photo($database, $plugins, $_POST['photoIDs']); + $photo = new Photo($database, $plugins, null, $_POST['photoIDs']); echo $photo->setTitle($_POST['title']); break; case 'setPhotoDescription': if (!isset($_POST['photoID'], $_POST['description'])) exit(); - $photo = new Photo($database, $plugins, $_POST['photoID']); + $photo = new Photo($database, $plugins, null, $_POST['photoID']); echo $photo->setDescription($_POST['description']); break; case 'setPhotoStar': if (!isset($_POST['photoIDs'])) exit(); - $photo = new Photo($database, $plugins, $_POST['photoIDs']); + $photo = new Photo($database, $plugins, null, $_POST['photoIDs']); echo $photo->setStar(); break; case 'setPhotoPublic': if (!isset($_POST['photoID'])) exit(); - $photo = new Photo($database, $plugins, $_POST['photoID']); + $photo = new Photo($database, $plugins, null, $_POST['photoID']); echo $photo->setPublic(); break; case 'setPhotoAlbum': if (!isset($_POST['photoIDs'], $_POST['albumID'])) exit(); - $photo = new Photo($database, $plugins, $_POST['photoIDs']); + $photo = new Photo($database, $plugins, null, $_POST['photoIDs']); echo $photo->setAlbum($_POST['albumID']); break; case 'setPhotoTags': if (!isset($_POST['photoIDs'], $_POST['tags'])) exit(); - $photo = new Photo($database, $plugins, $_POST['photoIDs']); + $photo = new Photo($database, $plugins, null, $_POST['photoIDs']); echo $photo->setTags($_POST['tags']); break; case 'deletePhoto': if (!isset($_POST['photoIDs'])) exit(); - $photo = new Photo($database, $plugins, $_POST['photoIDs']); + $photo = new Photo($database, $plugins, null, $_POST['photoIDs']); echo $photo->delete(); break; // Add Functions - case 'upload': if (isset($_FILES, $_POST['albumID'])) - echo upload($_FILES, $_POST['albumID']); + case 'upload': if (!isset($_FILES, $_POST['albumID'])) exit(); + $photo = new Photo($database, $plugins, $settings, null); + echo $photo->add($_FILES, $_POST['albumID']); break; case 'importUrl': if (isset($_POST['url'], $_POST['albumID'])) @@ -158,7 +159,7 @@ switch ($_POST['function']) { break; case 'getPhotoArchive': if (!isset($_GET['photoID'])) exit(); - $photo = new Photo($database, $plugins, $_GET['photoID']); + $photo = new Photo($database, $plugins, null, $_GET['photoID']); $photo->getArchive(); break; diff --git a/php/access/guest.php b/php/access/guest.php index 8e6e6dd..8efc34b 100644 --- a/php/access/guest.php +++ b/php/access/guest.php @@ -44,7 +44,7 @@ switch ($_POST['function']) { // Photo Functions case 'getPhoto': if (!isset($_POST['photoID'], $_POST['albumID'], $_POST['password'])) exit(); - $photo = new Photo($database, $plugins, $_POST['photoID']); + $photo = new Photo($database, $plugins, null, $_POST['photoID']); if ($photo->getPublic($_POST['password'])) echo json_encode($photo->get($_POST['albumID'])); else @@ -82,7 +82,7 @@ switch ($_POST['function']) { break; case 'getPhotoArchive': if (!isset($_GET['photoID'], $_GET['password'])) exit(); - $photo = new Photo($database, $plugins, $_GET['photoID']); + $photo = new Photo($database, $plugins, null, $_GET['photoID']); // Photo Download if ($photo->getPublic($_GET['password'])) diff --git a/php/modules/Album.php b/php/modules/Album.php index 9001d20..ce40eb4 100644 --- a/php/modules/Album.php +++ b/php/modules/Album.php @@ -447,7 +447,7 @@ class Album extends Module { # For each album delete photo while ($row = $photos->fetch_object()) { - $photo = new Photo($this->database, $this->plugins, $row->id); + $photo = new Photo($this->database, $this->plugins, null, $row->id); if (!$photo->delete($row->id)) $error = true; } diff --git a/php/modules/Photo.php b/php/modules/Photo.php index beeeae9..acca31e 100755 --- a/php/modules/Photo.php +++ b/php/modules/Photo.php @@ -11,19 +11,296 @@ if (!defined('LYCHEE')) exit('Error: Direct access is not allowed!'); class Photo extends Module { private $database = null; + private $settings = null; private $photoIDs = null; - public function __construct($database, $plugins, $photoIDs) { + public function __construct($database, $plugins, $settings, $photoIDs) { # Init vars $this->database = $database; $this->plugins = $plugins; + $this->settings = $settings; $this->photoIDs = $photoIDs; return true; } + public function add($files, $albumID, $description = '', $tags = '') { + + if (!isset($this->database)) return false; + + # Call plugins + $this->plugins(__METHOD__, 0, func_get_args()); + + switch($albumID) { + + case 's': + # s for public (share) + $public = 1; + $star = 0; + $albumID = 0; + break; + + case 'f': + # f for starred (fav) + $star = 1; + $public = 0; + $albumID = 0; + break; + + default: + $star = 0; + $public = 0; + break; + + } + + foreach ($files as $file) { + + if ($file['type']!=='image/jpeg'&& + $file['type']!=='image/png'&& + $file['type']!=='image/gif') + return false; + + $id = str_replace('.', '', microtime(true)); + while(strlen($id)<14) $id .= 0; + + $tmp_name = $file['tmp_name']; + $extension = array_reverse(explode('.', $file['name'])); + $extension = $extension[0]; + $photo_name = md5($id) . ".$extension"; + $path = __DIR__ . '/../../uploads/big/' . $photo_name; + + # Import if not uploaded via web + if (!is_uploaded_file($tmp_name)) { + if (copy($tmp_name, $path)) { @unlink($tmp_name); } + } else { + move_uploaded_file($tmp_name, $path); + } + + # Read infos + $info = $this->getInfo($path); + + # Use title of file if IPTC title missing + if ($info['title']==='') $info['title'] = mysqli_real_escape_string($this->database, substr(basename($file['name'], ".$extension"), 0, 30)); + + # Use description parameter if set + if ($description==='') $description = $info['description']; + + # Set orientation based on EXIF data + if ($file['type']==='image/jpeg'&&isset($info['orientation'])&&$info['orientation']!==''&&isset($info['width'])&&isset($info['height'])) { + + 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 + if (!$this->createThumb($path, $photo_name)) return false; + + # Save to DB + $query = "INSERT INTO lychee_photos (id, title, url, description, tags, type, width, height, size, iso, aperture, make, model, shutter, focal, takestamp, thumbUrl, album, public, star) + VALUES ( + '" . $id . "', + '" . $info['title'] . "', + '" . $photo_name . "', + '" . $description . "', + '" . $tags . "', + '" . $info['type'] . "', + '" . $info['width'] . "', + '" . $info['height'] . "', + '" . $info['size'] . "', + '" . $info['iso'] . "', + '" . $info['aperture'] . "', + '" . $info['make'] . "', + '" . $info['model'] . "', + '" . $info['shutter'] . "', + '" . $info['focal'] . "', + '" . $info['takestamp'] . "', + '" . md5($id) . ".jpeg', + '" . $albumID . "', + '" . $public . "', + '" . $star . "');"; + $result = $this->database->query($query); + + if (!$result) return false; + + } + + # Call plugins + $this->plugins(__METHOD__, 1, func_get_args()); + + return true; + + } + + private function createThumb($url, $filename, $width = 200, $height = 200) { + + if (!isset($this->settings)) return false; + + # Call plugins + $this->plugins(__METHOD__, 0, func_get_args()); + + $info = getimagesize($url); + $photoName = explode(".", $filename); + $newUrl = __DIR__ . '/../../uploads/thumb/' . $photoName[0] . '.jpeg'; + $newUrl2x = __DIR__ . '/../../uploads/thumb/' . $photoName[0] . '@2x.jpeg'; + + # create thumbnails with Imagick + if(extension_loaded('imagick')) { + + # Read image + $thumb = new Imagick(); + $thumb->readImage($url); + $thumb->setImageCompressionQuality($this->settings['thumbQuality']); + $thumb->setImageFormat('jpeg'); + + # Copy image for 2nd thumb version + $thumb2x = clone $thumb; + + # Create 1st version + $thumb->cropThumbnailImage($width, $height); + $thumb->writeImage($newUrl); + + # Create 2nd version + $thumb2x->cropThumbnailImage($width*2, $height*2); + $thumb2x->writeImage($newUrl2x); + + # Close thumb + $thumb->clear(); + $thumb->destroy(); + + # Close thumb2 + $thumb2x->clear(); + $thumb2x->destroy(); + + } else { + + # Set position and size + $thumb = imagecreatetruecolor($width, $height); + $thumb2x = imagecreatetruecolor($width*2, $height*2); + if ($info[0]<$info[1]) { + $newSize = $info[0]; + $startWidth = 0; + $startHeight = $info[1]/2 - $info[0]/2; + } else { + $newSize = $info[1]; + $startWidth = $info[0]/2 - $info[1]/2; + $startHeight = 0; + } + + # Fallback for older version + if ($info['mime']==='image/webp'&&floatval(phpversion())<5.5) return false; + + # Create new image + switch($info['mime']) { + case 'image/jpeg': $sourceImg = imagecreatefromjpeg($url); break; + case 'image/png': $sourceImg = imagecreatefrompng($url); break; + case 'image/gif': $sourceImg = imagecreatefromgif($url); break; + case 'image/webp': $sourceImg = imagecreatefromwebp($url); break; + default: return false; + } + + imagecopyresampled($thumb, $sourceImg, 0, 0, $startWidth, $startHeight, $width, $height, $newSize, $newSize); + imagecopyresampled($thumb2x, $sourceImg, 0, 0, $startWidth, $startHeight, $width*2, $height*2, $newSize, $newSize); + + imagejpeg($thumb, $newUrl, $this->settings['thumbQuality']); + imagejpeg($thumb2x, $newUrl2x, $this->settings['thumbQuality']); + + } + + # Call plugins + $this->plugins(__METHOD__, 1, func_get_args()); + + return true; + + } + public function get($albumID) { if (!isset($this->database, $this->photoIDs)) return false; @@ -64,6 +341,99 @@ class Photo extends Module { } + private function getInfo($url) { + + if (!isset($this->database, $url)) return false; + + # Call plugins + $this->plugins(__METHOD__, 0, func_get_args()); + + $iptcArray = array(); + $info = getimagesize($url, $iptcArray); + + # General information + $return['type'] = $info['mime']; + $return['width'] = $info[0]; + $return['height'] = $info[1]; + + # Size + $size = filesize($url)/1024; + if ($size>=1024) $return['size'] = round($size/1024, 1) . ' MB'; + else $return['size'] = round($size, 1) . ' KB'; + + # IPTC Metadata Fallback + $return['title'] = ''; + $return['description'] = ''; + + # IPTC Metadata + if(isset($iptcArray['APP13'])) { + + $iptcInfo = iptcparse($iptcArray['APP13']); + if (is_array($iptcInfo)) { + + $temp = @$iptcInfo['2#105'][0]; + if (isset($temp)&&strlen($temp)>0) $return['title'] = $temp; + + $temp = @$iptcInfo['2#120'][0]; + if (isset($temp)&&strlen($temp)>0) $return['description'] = $temp; + + } + + } + + # EXIF Metadata Fallback + $return['orientation'] = ''; + $return['iso'] = ''; + $return['aperture'] = ''; + $return['make'] = ''; + $return['model'] = ''; + $return['shutter'] = ''; + $return['focal'] = ''; + $return['takestamp'] = ''; + + # Read EXIF + if ($info['mime']=='image/jpeg') $exif = @exif_read_data($url, 'EXIF', 0); + else $exif = false; + + # EXIF Metadata + if ($exif!==false) { + + if (isset($exif['Orientation'])) $return['orientation'] = $exif['Orientation']; + else if (isset($exif['IFD0']['Orientation'])) $return['orientation'] = $exif['IFD0']['Orientation']; + + $temp = @$exif['ISOSpeedRatings']; + if (isset($temp)) $return['iso'] = $temp; + + $temp = @$exif['COMPUTED']['ApertureFNumber']; + if (isset($temp)) $return['aperture'] = $temp; + + $temp = @$exif['Make']; + if (isset($temp)) $return['make'] = $exif['Make']; + + $temp = @$exif['Model']; + if (isset($temp)) $return['model'] = $temp; + + $temp = @$exif['ExposureTime']; + if (isset($temp)) $return['shutter'] = $exif['ExposureTime'] . ' Sec.'; + + $temp = @$exif['FocalLength']; + if (isset($temp)) $return['focal'] = ($temp/1) . ' mm'; + + $temp = @$exif['DateTimeOriginal']; + if (isset($temp)) $return['takestamp'] = strtotime($temp); + + } + + # Security + foreach(array_keys($return) as $key) $return[$key] = mysqli_real_escape_string($this->database, $return[$key]); + + # Call plugins + $this->plugins(__METHOD__, 1, func_get_args()); + + return $return; + + } + public function getArchive() { if (!isset($this->database, $this->photoIDs)) return false; diff --git a/php/modules/upload.php b/php/modules/upload.php index 7feae12..f1c5468 100644 --- a/php/modules/upload.php +++ b/php/modules/upload.php @@ -9,358 +9,6 @@ if (!defined('LYCHEE')) exit('Error: Direct access is not allowed!'); -function upload($files, $albumID, $description = '', $tags = '') { - - global $database, $settings; - - switch($albumID) { - // s for public (share) - case 's': - $public = 1; - $star = 0; - $albumID = 0; - break; - // f for starred (fav) - case 'f': - $star = 1; - $public = 0; - $albumID = 0; - break; - default: - $star = 0; - $public = 0; - } - - foreach ($files as $file) { - - if ($file['type']!=='image/jpeg'&& - $file['type']!=='image/png'&& - $file['type']!=='image/gif') - return false; - - $id = str_replace('.', '', microtime(true)); - while(strlen($id)<14) $id .= 0; - - $tmp_name = $file['tmp_name']; - $extension = array_reverse(explode('.', $file['name'])); - $extension = $extension[0]; - $photo_name = md5($id) . ".$extension"; - - // Import if not uploaded via web - if (!is_uploaded_file($tmp_name)) { - if (copy($tmp_name, __DIR__ . '/../../uploads/big/' . $photo_name)) { - @unlink($tmp_name); - $import_name = $tmp_name; - } - } else { - move_uploaded_file($tmp_name, __DIR__ . '/../../uploads/big/' . $photo_name); - $import_name = ''; - } - - // Read infos - $info = getInfo($photo_name); - - // Use title of file if IPTC title missing - if ($info['title']==='') $info['title'] = mysqli_real_escape_string($database, substr(basename($file['name'], ".$extension"), 0, 30)); - - // Use description parameter if set - if ($description==='') $description = $info['description']; - - // Set orientation based on EXIF data - if ($file['type']==='image/jpeg'&&isset($info['orientation'])&&isset($info['width'])&&isset($info['height'])) { - - 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 - if (!createThumb($photo_name)) return false; - - // Save to DB - $query = "INSERT INTO lychee_photos (id, title, url, description, tags, type, width, height, size, iso, aperture, make, model, shutter, focal, takestamp, thumbUrl, album, public, star, import_name) - VALUES ( - '" . $id . "', - '" . $info['title'] . "', - '" . $photo_name . "', - '" . $description . "', - '" . $tags . "', - '" . $info['type'] . "', - '" . $info['width'] . "', - '" . $info['height'] . "', - '" . $info['size'] . "', - '" . $info['iso'] . "', - '" . $info['aperture'] . "', - '" . $info['make'] . "', - '" . $info['model'] . "', - '" . $info['shutter'] . "', - '" . $info['focal'] . "', - '" . $info['takestamp'] . "', - '" . md5($id) . ".jpeg', - '" . $albumID . "', - '" . $public . "', - '" . $star . "', - '" . $import_name . "');"; - $result = $database->query($query); - - if (!$result) return false; - - } - - return true; - -} - -function getInfo($filename) { - - global $database; - - $url = __DIR__ . '/../../uploads/big/' . $filename; - $iptcArray = array(); - $info = getimagesize($url, $iptcArray); - - // General information - $return['type'] = $info['mime']; - $return['width'] = $info[0]; - $return['height'] = $info[1]; - - // Size - $size = filesize($url)/1024; - if ($size>=1024) $return['size'] = round($size/1024, 1) . ' MB'; - else $return['size'] = round($size, 1) . ' KB'; - - // IPTC Metadata Fallback - $return['title'] = ''; - $return['description'] = ''; - - // IPTC Metadata - if(isset($iptcArray['APP13'])) { - - $iptcInfo = iptcparse($iptcArray['APP13']); - if (is_array($iptcInfo)) { - - $temp = @$iptcInfo['2#105'][0]; - if (isset($temp)&&strlen($temp)>0) $return['title'] = $temp; - - $temp = @$iptcInfo['2#120'][0]; - if (isset($temp)&&strlen($temp)>0) $return['description'] = $temp; - - } - - } - - // EXIF Metadata Fallback - $return['orientation'] = ''; - $return['iso'] = ''; - $return['aperture'] = ''; - $return['make'] = ''; - $return['model'] = ''; - $return['shutter'] = ''; - $return['focal'] = ''; - $return['takestamp'] = ''; - - // Read EXIF - if ($info['mime']=='image/jpeg') $exif = @exif_read_data($url, 'EXIF', 0); - else $exif = false; - - // EXIF Metadata - if ($exif!==false) { - - if (isset($exif['Orientation'])) $return['orientation'] = $exif['Orientation']; - else if (isset($exif['IFD0']['Orientation'])) $return['orientation'] = $exif['IFD0']['Orientation']; - - $temp = @$exif['ISOSpeedRatings']; - if (isset($temp)) $return['iso'] = $temp; - - $temp = @$exif['COMPUTED']['ApertureFNumber']; - if (isset($temp)) $return['aperture'] = $temp; - - $temp = @$exif['Make']; - if (isset($temp)) $return['make'] = $exif['Make']; - - $temp = @$exif['Model']; - if (isset($temp)) $return['model'] = $temp; - - $temp = @$exif['ExposureTime']; - if (isset($temp)) $return['shutter'] = $exif['ExposureTime'] . ' Sec.'; - - $temp = @$exif['FocalLength']; - if (isset($temp)) $return['focal'] = ($temp/1) . ' mm'; - - $temp = @$exif['DateTimeOriginal']; - if (isset($temp)) $return['takestamp'] = strtotime($temp); - - } - - // Security - foreach(array_keys($return) as $key) $return[$key] = mysqli_real_escape_string($database, $return[$key]); - - return $return; - -} - -function createThumb($filename, $width = 200, $height = 200) { - - global $settings; - - $url = __DIR__ . '/../../uploads/big/' . $filename; - $info = getimagesize($url); - - $photoName = explode(".", $filename); - $newUrl = __DIR__ . '/../../uploads/thumb/' . $photoName[0] . '.jpeg'; - $newUrl2x = __DIR__ . '/../../uploads/thumb/' . $photoName[0] . '@2x.jpeg'; - - // create thumbnails with Imagick - if(extension_loaded('imagick')) { - - // read image - $thumb = new Imagick(); - $thumb->readImage($url); - $thumb->setImageCompressionQuality($settings['thumbQuality']); - $thumb->setImageFormat('jpeg'); - - // copy image for 2nd thumb version - $thumb2x = clone $thumb; - - // creat 1st version - $thumb->cropThumbnailImage($width, $height); - $thumb->writeImage($newUrl); - - // creat 2nd version - $thumb2x->cropThumbnailImage($width*2, $height*2); - $thumb2x->writeImage($newUrl2x); - - // close thumb - $thumb->clear(); - $thumb->destroy(); - - // close thumb2 - $thumb2x->clear(); - $thumb2x->destroy(); - - } else { - - // Set position and size - $thumb = imagecreatetruecolor($width, $height); - $thumb2x = imagecreatetruecolor($width*2, $height*2); - if ($info[0]<$info[1]) { - $newSize = $info[0]; - $startWidth = 0; - $startHeight = $info[1]/2 - $info[0]/2; - } else { - $newSize = $info[1]; - $startWidth = $info[0]/2 - $info[1]/2; - $startHeight = 0; - } - - // Fallback for older version - if ($info['mime']==='image/webp'&&floatval(phpversion())<5.5) return false; - - // Create new image - switch($info['mime']) { - case 'image/jpeg': $sourceImg = imagecreatefromjpeg($url); break; - case 'image/png': $sourceImg = imagecreatefrompng($url); break; - case 'image/gif': $sourceImg = imagecreatefromgif($url); break; - case 'image/webp': $sourceImg = imagecreatefromwebp($url); break; - default: return false; - } - - imagecopyresampled($thumb,$sourceImg,0,0,$startWidth,$startHeight,$width,$height,$newSize,$newSize); - imagecopyresampled($thumb2x,$sourceImg,0,0,$startWidth,$startHeight,$width*2,$height*2,$newSize,$newSize); - - imagejpeg($thumb,$newUrl,$settings['thumbQuality']); - imagejpeg($thumb2x,$newUrl2x,$settings['thumbQuality']); - - } - - return true; - -} - function importPhoto($path, $albumID = 0, $description = '', $tags = '') { $info = getimagesize($path);