height > $photo->width) { $aspectRatio = $photo->height / $photo->width; $thumbnailWidth = intval($thumbnailInfo['height']) / $aspectRatio; $thumbnailHeight = intval($thumbnailInfo['height']); } $thumbnailImageResource = imagecreatetruecolor($thumbnailWidth, $thumbnailHeight); imagecopyresized( $thumbnailImageResource, $gdImageResource, 0, 0, 0, 0, $thumbnailWidth, $thumbnailHeight, $photo->width, $photo->height ); // TODO make the /tmp folder configurable $tempName = tempnam('/tmp', 'btw_thumb_'); $tempNameWithExtension = ($tempName . '.jpg'); rename($tempName, $tempNameWithExtension); // TODO make thumbnail quality configurable imagejpeg($thumbnailImageResource, $tempNameWithExtension, 90); return $tempNameWithExtension; } public function openImage($imagePath, &$imageInfo) { $imageInfo = getimagesize($imagePath); if ($imageInfo === false) { throw new \Exception(sprintf('The image "%s" does not appear to be a valid image, or cannot be read', pathinfo($imagePath, PATHINFO_FILENAME))); } $im = false; $type = $imageInfo[2]; $allowedTypes = [ IMG_GIF, IMG_PNG, IMG_JPEG, IMG_WBMP ]; if (!in_array($type, $allowedTypes)) { return false; } switch ($type) { case IMG_GIF: $im = imagecreatefromgif($imagePath); break; case IMG_JPEG: $im = imagecreatefromjpeg($imagePath); break; case IMG_PNG: $im = imagecreatefrompng($imagePath); break; case IMG_WBMP: $im = imagecreatefromwbmp($imagePath); break; } return $im; } public function rotateImage($imageResource, $angle) { imagesetinterpolation($imageResource, IMG_SINC); return imagerotate($imageResource, $angle, 0); } public function saveImage($imageResource, $imagePath, $imageInfo) { switch ($imageInfo[2]) { case IMG_GIF: imagegif($imageResource, $imagePath); break; case IMG_JPEG: imagejpeg($imageResource, $imagePath); break; case IMG_PNG: imagepng($imageResource, $imagePath); break; case IMG_WBMP: imagewbmp($imageResource, $imagePath); break; } } }