From ab46007709c3a683759c583d43e0bbdf6181e6d2 Mon Sep 17 00:00:00 2001 From: Ian Denhardt Date: Tue, 3 Aug 2010 17:07:07 -0400 Subject: [PATCH] Thumbnails in the photo plugins. --- plugins/GNUsocialPhotos/actions/photos.php | 60 +++++++++++++++++++--- 1 file changed, 53 insertions(+), 7 deletions(-) diff --git a/plugins/GNUsocialPhotos/actions/photos.php b/plugins/GNUsocialPhotos/actions/photos.php index d34263e5b8..1c7fb82bd2 100644 --- a/plugins/GNUsocialPhotos/actions/photos.php +++ b/plugins/GNUsocialPhotos/actions/photos.php @@ -85,20 +85,66 @@ class PhotosAction extends Action } $pathparts = explode('/', $args[1]['nickname']); $username = $pathparts[0]; + $this->elementStart('ul', array('class' => 'photothumbs')); while (false !== ($file = readdir($dir))) { $fparts = explode('-', $file); if ($fparts[0] == $username // uploaded by this user && ((substr($file, -4) == '.png') || (substr($file, -4) == '.jpg') // XXX: is this needed? status.net seems to save jpgs as .jpeg || (substr($file, -5) == '.jpeg') - || (substr($file, -4) == '.gif') - || (substr($file, -4) == '.svg'))) { // and it's an image + || (substr($file, -4) == '.gif'))) { // and it's an image common_log(LOG_INFO, 'file : ' . $file); - $this->elementStart('p'); - $this->element('a', array('href' => 'http://' . common_config('site', 'server') . '/file/' . $file), $file); - $this->elementEnd('p'); + $this->elementStart('li'); + $this->elementStart('a', array('href' => 'http://' . common_config('site', 'server') . '/file/' . $file)); + if (!file_exists(INSTALLDIR . '/file/thumb.' . $file)) { + $this->makeThumb($file); + } + $this->element('img', array('src' => 'http://' . common_config('site', 'server') . '/file/' . 'thumb.' . $file)); + $this->elementEnd('a'); + $this->elementEnd('li'); } } - } - } + $this->elementEnd('ul'); + } + } + + function makeThumb($filename) + { + $height_dest = 96; + $width_dest = 128; + + if (substr($filename, -4) == '.jpg' || substr($filename, -5) == '.jpeg') { + $image_src = imagecreatefromjpeg(INSTALLDIR . '/file/' . $filename); + $image_type = IMAGETYPE_JPEG; + } else if(substr($filename, -4) == '.png') { + $image_src = imagecreatefrompng(INSTALLDIR . '/file/' . $filename); + $image_type = IMAGETYPE_PNG; + } else if(substr($filename, -4) == '.gif') { + $image_src = imagecreatefromgif(INSTALLDIR . '/file/' . $filename); + $image_type = IMAGETYPE_GIF; + } else { + return false; + } + + $image_dest = imagecreatetruecolor($width_dest, $height_dest); + $size_src = getimagesize(INSTALLDIR . '/file/' . $filename); + + imagecopyresampled($image_dest, $image_src, 0, 0, 0, 0, $width_dest, $height_dest, $size_src[0], $size_src[1]); + switch ($image_type) { + case IMAGETYPE_JPEG: + imagejpeg($image_dest, INSTALLDIR . '/file/' . 'thumb.' . $filename, 100); + break; + case IMAGETYPE_PNG: + imagepng($image_dest, INSTALLDIR . '/file/thumb.' . $filename); + break; + case IMAGETYPE_GIF: + imagegif($image_dest, INSTALLDIR . '/file/thumb.' . $filename); + break; + } + + imagedestroy($image_src); + imagedestroy($image_dest); + + return true; + } } -- 2.39.5