]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Fixed #1134; Consolidated image scaling functions.
authorSean Murphy <sgmurphy@gmail.com>
Thu, 5 Feb 2009 00:32:15 +0000 (19:32 -0500)
committerSean Murphy <sgmurphy@gmail.com>
Thu, 5 Feb 2009 00:32:15 +0000 (19:32 -0500)
actions/avatarsettings.php
actions/grouplogo.php
classes/Avatar.php
classes/Profile.php
classes/User_group.php
lib/imagefile.php

index 19f53b882850d62e60e74c16b7b398a7c99e620f..643c0e567590dc102e05d519074a9ae5d9dbc5d2 100644 (file)
@@ -34,6 +34,8 @@ if (!defined('LACONICA')) {
 
 require_once INSTALLDIR.'/lib/accountsettingsaction.php';
 
+define('MAX_ORIGINAL', 480);
+
 /**
  * Upload an avatar
  *
@@ -286,7 +288,7 @@ class AvatarsettingsAction extends AccountSettingsAction
 
         $filepath = common_avatar_path($filename);
 
-        move_uploaded_file($imagefile->filename, $filepath);
+        move_uploaded_file($imagefile->filepath, $filepath);
 
         $filedata = array('filename' => $filename,
                           'filepath' => $filepath,
@@ -312,84 +314,29 @@ class AvatarsettingsAction extends AccountSettingsAction
 
     function cropAvatar()
     {
-        $user = common_current_user();
-
-        $profile = $user->getProfile();
-
-        $x = $this->arg('avatar_crop_x');
-        $y = $this->arg('avatar_crop_y');
-        $w = $this->arg('avatar_crop_w');
-        $h = $this->arg('avatar_crop_h');
-
         $filedata = $_SESSION['FILEDATA'];
 
         if (!$filedata) {
             $this->serverError(_('Lost our file data.'));
             return;
         }
-
-        $filepath = common_avatar_path($filedata['filename']);
-
-        if (!file_exists($filepath)) {
-            $this->serverError(_('Lost our file.'));
-            return;
-        }
-
-        switch ($filedata['type']) {
-        case IMAGETYPE_GIF:
-            $image_src = imagecreatefromgif($filepath);
-            break;
-        case IMAGETYPE_JPEG:
-            $image_src = imagecreatefromjpeg($filepath);
-            break;
-        case IMAGETYPE_PNG:
-            $image_src = imagecreatefrompng($filepath);
-            break;
-         default:
-            $this->serverError(_('Unknown file type'));
-            return;
-        }
-
-        common_debug("W = $w, H = $h, X = $x, Y = $y");
-
-        $image_dest = imagecreatetruecolor($w, $h);
-
-        $background = imagecolorallocate($image_dest, 0, 0, 0);
-        ImageColorTransparent($image_dest, $background);
-        imagealphablending($image_dest, false);
-
-        imagecopyresized($image_dest, $image_src, 0, 0, $x, $y, $w, $h, $w, $h);
-
-        $cur = common_current_user();
-
-        $filename = common_avatar_filename($cur->id,
-                                           image_type_to_extension($filedata['type']),
-                                           null,
-                                           common_timestamp());
-
-        $filepath = common_avatar_path($filename);
-
-        switch ($filedata['type']) {
-        case IMAGETYPE_GIF:
-            imagegif($image_dest, $filepath);
-            break;
-        case IMAGETYPE_JPEG:
-            imagejpeg($image_dest, $filepath);
-            break;
-        case IMAGETYPE_PNG:
-            imagepng($image_dest, $filepath);
-            break;
-         default:
-            $this->serverError(_('Unknown file type'));
-            return;
-        }
-
+        
+        // If image is not being cropped assume pos & dimentions of original
+        $dest_x = $this->arg('avatar_crop_x') ? $this->arg('avatar_crop_x'):0;
+        $dest_y = $this->arg('avatar_crop_y') ? $this->arg('avatar_crop_y'):0;
+        $dest_w = $this->arg('avatar_crop_w') ? $this->arg('avatar_crop_w'):$filedata['width'];
+        $dest_h = $this->arg('avatar_crop_h') ? $this->arg('avatar_crop_h'):$filedata['height'];
+        $size = min($dest_w, $dest_h);
+        $size = ($size > MAX_ORIGINAL) ? MAX_ORIGINAL:$size;
+        
         $user = common_current_user();
+        $profile = $user->getProfile();
+        
+        $imagefile = new ImageFile($user->id, $filedata['filepath']);
+        $filename = $imagefile->resize($size, $dest_x, $dest_y, $dest_w, $dest_h);
 
-        $profile = $cur->getProfile();
-
-        if ($profile->setOriginal($filepath)) {
-            @unlink(common_avatar_path($filedata['filename']));
+        if ($profile->setOriginal($filename)) {
+            @unlink($filedata['filepath']);
             unset($_SESSION['FILEDATA']);
             $this->mode = 'upload';
             $this->showForm(_('Avatar updated.'), true);
index d8f7a935329f96d015d28ae442677fe93580b25c..294005f1bbce00f1d3038a63df1c2212ae3b21b4 100644 (file)
@@ -350,7 +350,7 @@ class GrouplogoAction extends Action
 
         $filepath = common_avatar_path($filename);
 
-        move_uploaded_file($imagefile->filename, $filepath);
+        move_uploaded_file($imagefile->filepath, $filepath);
 
         $filedata = array('filename' => $filename,
                           'filepath' => $filepath,
@@ -376,96 +376,26 @@ class GrouplogoAction extends Action
 
     function cropLogo()
     {
-        $user = common_current_user();
-        $profile = $user->getProfile();
-
         $filedata = $_SESSION['FILEDATA'];
 
         if (!$filedata) {
             $this->serverError(_('Lost our file data.'));
             return;
         }
-
-        $filepath = common_avatar_path($filedata['filename']);
-
-        if (!file_exists($filepath)) {
-            $this->serverError(_('Lost our file.'));
-            return;
-        }
-
-        switch ($filedata['type']) {
-        case IMAGETYPE_GIF:
-            $image_src = imagecreatefromgif($filepath);
-            break;
-        case IMAGETYPE_JPEG:
-            $image_src = imagecreatefromjpeg($filepath);
-            break;
-        case IMAGETYPE_PNG:
-            $image_src = imagecreatefrompng($filepath);
-            break;
-         default:
-            $this->serverError(_('Unknown file type'));
-            return;
-        }
-
+        
         // If image is not being cropped assume pos & dimentions of original
         $dest_x = $this->arg('avatar_crop_x') ? $this->arg('avatar_crop_x'):0;
         $dest_y = $this->arg('avatar_crop_y') ? $this->arg('avatar_crop_y'):0;
         $dest_w = $this->arg('avatar_crop_w') ? $this->arg('avatar_crop_w'):$filedata['width'];
         $dest_h = $this->arg('avatar_crop_h') ? $this->arg('avatar_crop_h'):$filedata['height'];
-        $size = ($dest_w > MAX_ORIGINAL) ? MAX_ORIGINAL : $dest_w;
+        $size = min($dest_w, $dest_h);
+        $size = ($size > MAX_ORIGINAL) ? MAX_ORIGINAL:$size;
         
-        common_debug("W = $dest_w, H = $dest_h, X = $dest_x, Y = $dest_y, size = $size");
-
-        $image_dest = imagecreatetruecolor($size, $size);
-        
-        if ($filedata['type'] == IMAGETYPE_GIF || $filedata['type'] == IMAGETYPE_PNG) {
-
-            $transparent_idx = imagecolortransparent($image_src);
-
-            if ($transparent_idx >= 0) {
-
-                $transparent_color = imagecolorsforindex($image_src, $transparent_idx);
-                $transparent_idx = imagecolorallocate($image_dest, $transparent_color['red'], $transparent_color['green'], $transparent_color['blue']);
-                imagefill($image_dest, 0, 0, $transparent_idx);
-                imagecolortransparent($image_dest, $transparent_idx);
-
-            } elseif ($filedata['type'] == IMAGETYPE_PNG) {
-
-                imagealphablending($image_dest, false);
-                $transparent = imagecolorallocatealpha($image_dest, 0, 0, 0, 127);
-                imagefill($image_dest, 0, 0, $transparent);
-                imagesavealpha($image_dest, true);
-
-            }
-        }
-
-        imagecopyresampled($image_dest, $image_src, 0, 0, $dest_x, $dest_y, $size, $size, $dest_w, $dest_h);
-
-        $filename = common_avatar_filename($this->group->id,
-                                           image_type_to_extension($filedata['type']),
-                                           null,
-                                           'group-'.common_timestamp());
-
-        $filepath = common_avatar_path($filename);
-
-        switch ($filedata['type']) {
-        case IMAGETYPE_GIF:
-            imagegif($image_dest, $filepath);
-            break;
-        case IMAGETYPE_JPEG:
-            imagejpeg($image_dest, $filepath);
-            break;
-        case IMAGETYPE_PNG:
-            imagepng($image_dest, $filepath);
-            break;
-         default:
-            $this->serverError(_('Unknown file type'));
-            return;
-        }
+        $imagefile = new ImageFile($this->group->id, $filedata['filepath']);
+        $filename = $imagefile->resize($size, $dest_x, $dest_y, $dest_w, $dest_h);
 
-        if ($this->group->setOriginal($filename, $filedata['type'])) {
-            @unlink(common_avatar_path($filedata['filename']));
+        if ($this->group->setOriginal($filename)) {
+            @unlink($filedata['filepath']);
             unset($_SESSION['FILEDATA']);
             $this->mode = 'upload';
             $this->showForm(_('Logo updated.'), true);
index 9ae920647adfbae0c7ce6e767eca7fa7ec243c91..6a9ea7686584a2fe78b5af7c11a77571c6d9fc32 100644 (file)
@@ -36,102 +36,6 @@ class Avatar extends Memcached_DataObject
             @unlink(common_avatar_path($filename));
         }
     }
-
-    # Create and save scaled version of this avatar
-    # XXX: maybe break into different methods
-
-    function scale($size)
-    {
-
-        $image_s = imagecreatetruecolor($size, $size);
-        $image_a = $this->to_image();
-        $square = min($this->width, $this->height);
-        imagecolortransparent($image_s, imagecolorallocate($image_s, 0, 0, 0));
-        imagealphablending($image_s, false);
-        imagesavealpha($image_s, true);
-        imagecopyresampled($image_s, $image_a, 0, 0, 0, 0,
-                           $size, $size, $square, $square);
-
-        $ext = ($this->mediattype == 'image/jpeg') ? ".jpeg" : ".png";
-
-        $filename = common_avatar_filename($this->profile_id, $ext, $size, common_timestamp());
-
-        if ($this->mediatype == 'image/jpeg') {
-            imagejpeg($image_s, common_avatar_path($filename));
-        } else {
-            imagepng($image_s, common_avatar_path($filename));
-        }
-
-        $scaled = DB_DataObject::factory('avatar');
-        $scaled->profile_id = $this->profile_id;
-        $scaled->width = $size;
-        $scaled->height = $size;
-        $scaled->original = false;
-        $scaled->mediatype = ($this->mediattype == 'image/jpeg') ? 'image/jpeg' : 'image/png';
-        $scaled->filename = $filename;
-        $scaled->url = common_avatar_url($filename);
-        $scaled->created = DB_DataObject_Cast::dateTime(); # current time
-
-        if ($scaled->insert()) {
-            return $scaled;
-        } else {
-            return null;
-        }
-    }
-
-    function scale_and_crop($size, $x, $y, $w, $h) 
-    {
-
-        $image_s = imagecreatetruecolor($size, $size);
-        $image_a = $this->to_image();
-
-        # Retain alpha channel info if possible for .pngs
-        $background = imagecolorallocate($image_s, 0, 0, 0);
-        ImageColorTransparent($image_s, $background);
-        imagealphablending($image_s, false);
-
-        imagecopyresized($image_s, $image_a, 0, 0, $x, $y, $size, $size, $w, $h);
-
-        $ext = ($this->mediattype == 'image/jpeg') ? ".jpeg" : ".png";
-
-        $filename = common_avatar_filename($this->profile_id, $ext, $size, common_timestamp());
-
-        if ($this->mediatype == 'image/jpeg') {
-            imagejpeg($image_s, common_avatar_path($filename));
-        } else {
-            imagepng($image_s, common_avatar_path($filename));
-        }
-
-        $cropped = DB_DataObject::factory('avatar');
-        $cropped->profile_id = $this->profile_id;
-        $cropped->width = $size;
-        $cropped->height = $size;
-        $cropped->original = false;
-        $cropped->mediatype = ($this->mediattype == 'image/jpeg') ? 'image/jpeg' : 'image/png';
-        $cropped->filename = $filename;
-        $cropped->url = common_avatar_url($filename);
-        $cropped->created = DB_DataObject_Cast::dateTime(); # current time
-
-        if ($cropped->insert()) {
-            return $cropped;
-        } else {
-            return NULL;
-        }
-    }
-
-    function to_image() 
-    {
-        $filepath = common_avatar_path($this->filename);
-        if ($this->mediatype == 'image/gif') {
-            return imagecreatefromgif($filepath);
-        } else if ($this->mediatype == 'image/jpeg') {
-            return imagecreatefromjpeg($filepath);
-        } else if ($this->mediatype == 'image/png') {
-            return imagecreatefrompng($filepath);
-        } else {
-            return NULL;
-        }
-    }
     
     function &pkeyGet($kv) 
     {
index ab5a48e57f986ef6315c2aab89a97b85ca0c960c..5be632f87c4cc29d59b6712bb3c7d79e0db0dc3c 100644 (file)
@@ -69,28 +69,15 @@ class Profile extends Memcached_DataObject
         }
     }
 
-    function setOriginal($source)
+    function setOriginal($filename)
     {
-
-        $info = @getimagesize($source);
-
-        if (!$info) {
-            return null;
-        }
-
-        $filename = common_avatar_filename($this->id,
-                                           image_type_to_extension($info[2]),
-                                           null, common_timestamp());
-        $filepath = common_avatar_path($filename);
-
-        copy($source, $filepath);
+        $imagefile = new ImageFile($this->id, common_avatar_path($filename));
 
         $avatar = new Avatar();
-
         $avatar->profile_id = $this->id;
-        $avatar->width = $info[0];
-        $avatar->height = $info[1];
-        $avatar->mediatype = image_type_to_mime_type($info[2]);
+        $avatar->width = $imagefile->width;
+        $avatar->height = $imagefile->height;
+        $avatar->mediatype = image_type_to_mime_type($imagefile->type);
         $avatar->filename = $filename;
         $avatar->original = true;
         $avatar->url = common_avatar_url($filename);
@@ -98,21 +85,29 @@ class Profile extends Memcached_DataObject
 
         # XXX: start a transaction here
 
-        if (!$this->delete_avatars()) {
-            @unlink($filepath);
-            return null;
-        }
-
-        if (!$avatar->insert()) {
-            @unlink($filepath);
+        if (!$this->delete_avatars() || !$avatar->insert()) {
+            @unlink(common_avatar_path($filename));
             return null;
         }
 
         foreach (array(AVATAR_PROFILE_SIZE, AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE) as $size) {
             # We don't do a scaled one if original is our scaled size
             if (!($avatar->width == $size && $avatar->height == $size)) {
-                $s = $avatar->scale($size);
-                if (!$s) {
+                
+                $scaled_filename = $imagefile->resize($size);
+                
+                //$scaled = DB_DataObject::factory('avatar');
+                $scaled = new Avatar();
+                $scaled->profile_id = $this->id;
+                $scaled->width = $size;
+                $scaled->height = $size;
+                $scaled->original = false;
+                $scaled->mediatype = image_type_to_mime_type($imagefile->type);
+                $scaled->filename = $scaled_filename;
+                $scaled->url = common_avatar_url($scaled_filename);
+                $scaled->created = DB_DataObject_Cast::dateTime(); # current time
+
+                if (!$scaled->insert()) {
                     return null;
                 }
             }
@@ -121,24 +116,6 @@ class Profile extends Memcached_DataObject
         return $avatar;
     }
 
-    function crop_avatars($x, $y, $w, $h)
-    {
-
-        $avatar = $this->getOriginalAvatar();
-        $this->delete_avatars(false); # don't delete original
-
-        foreach (array(AVATAR_PROFILE_SIZE, AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE) as $size) {
-            # We don't do a scaled one if original is our scaled size
-            if (!($avatar->width == $size && $avatar->height == $size)) {
-                $s = $avatar->scale_and_crop($size, $x, $y, $w, $h);
-                if (!$s) {
-                    return NULL;
-                }
-            }
-        }
-        return true;
-    }
-
     function delete_avatars($original=true)
     {
         $avatar = new Avatar();
index 092c1bc347a7f1d702371c97b2c093deee8c1e1c..340d7f67a7e9047a93b651ded7c5391a37f64853 100755 (executable)
@@ -88,96 +88,16 @@ class User_group extends Memcached_DataObject
         return $members;
     }
 
-    function setOriginal($filename, $type)
+    function setOriginal($filename)
     {
+        $imagefile = new ImageFile($this->id, common_avatar_path($filename));
+        
         $orig = clone($this);
         $this->original_logo = common_avatar_url($filename);
-        $this->homepage_logo = common_avatar_url($this->scale($filename,
-                                                              AVATAR_PROFILE_SIZE,
-                                                              $type));
-        $this->stream_logo = common_avatar_url($this->scale($filename,
-                                                            AVATAR_STREAM_SIZE,
-                                                            $type));
-        $this->mini_logo = common_avatar_url($this->scale($filename,
-                                                          AVATAR_MINI_SIZE,
-                                                          $type));
+        $this->homepage_logo = common_avatar_url($imagefile->resize(AVATAR_PROFILE_SIZE));
+        $this->stream_logo = common_avatar_url($imagefile->resize(AVATAR_STREAM_SIZE));
+        $this->mini_logo = common_avatar_url($imagefile->resize(AVATAR_MINI_SIZE));
         common_debug(common_log_objstring($this));
         return $this->update($orig);
     }
-
-    function scale($filename, $size, $type)
-    {
-        $filepath = common_avatar_path($filename);
-
-        if (!file_exists($filepath)) {
-            $this->serverError(_('Lost our file.'));
-            return;
-        }
-
-        $info = @getimagesize($filepath);
-
-        switch ($type) {
-         case IMAGETYPE_GIF:
-            $image_src = imagecreatefromgif($filepath);
-            break;
-         case IMAGETYPE_JPEG:
-            $image_src = imagecreatefromjpeg($filepath);
-            break;
-         case IMAGETYPE_PNG:
-            $image_src = imagecreatefrompng($filepath);
-            break;
-         default:
-            $this->serverError(_('Unknown file type'));
-            return;
-        }
-
-        $image_dest = imagecreatetruecolor($size, $size);
-        
-        if ($type == IMAGETYPE_GIF || $type == IMAGETYPE_PNG) {
-
-            $transparent_idx = imagecolortransparent($image_src);
-            
-            if ($transparent_idx >= 0) {
-                
-                $transparent_color = imagecolorsforindex($image_src, $transparent_idx);
-                $transparent_idx = imagecolorallocate($image_dest, $transparent_color['red'], $transparent_color['green'], $transparent_color['blue']);
-                imagefill($image_dest, 0, 0, $transparent_idx);
-                imagecolortransparent($image_dest, $transparent_idx);
-                
-            } elseif ($type == IMAGETYPE_PNG) {
-                
-                imagealphablending($image_dest, false);
-                $transparent = imagecolorallocatealpha($image_dest, 0, 0, 0, 127);
-                imagefill($image_dest, 0, 0, $transparent);
-                imagesavealpha($image_dest, true);
-                
-            }
-        }
-
-        imagecopyresampled($image_dest, $image_src, 0, 0, 0, 0, $size, $size, $info[0], $info[1]);
-
-        $outname = common_avatar_filename($this->id,
-                                          image_type_to_extension($type),
-                                          $size,
-                                          common_timestamp());
-
-        $outpath = common_avatar_path($outname);
-
-        switch ($type) {
-         case IMAGETYPE_GIF:
-            imagegif($image_dest, $outpath);
-            break;
-         case IMAGETYPE_JPEG:
-            imagejpeg($image_dest, $outpath);
-            break;
-         case IMAGETYPE_PNG:
-            imagepng($image_dest, $outpath);
-            break;
-         default:
-            $this->serverError(_('Unknown file type'));
-            return;
-        }
-
-        return $outname;
-    }
 }
index 7f1db892c175e79284c3c40cb8cf74e583e0670d..5e9913235caeb87a8eb6ad50c8ed04ac070fd786 100644 (file)
@@ -47,18 +47,22 @@ if (!defined('LACONICA')) {
 
 class ImageFile
 {
-    var $filename = null;
-    var $barename = null;
-    var $type = null;
-    var $height = null;
-    var $width = null;
+    var $id;
+    var $filepath;
+    var $barename;
+    var $type;
+    var $height;
+    var $width;
 
-    function __construct($filename=null, $type=null, $width=null, $height=null)
+    function __construct($id=null, $filepath=null, $type=null, $width=null, $height=null)
     {
-        $this->filename = $filename;
-        $this->type = $type;
-        $this->width = $type;
-        $this->height = $type;
+        $this->id = $id;
+        $this->filepath = $filepath;
+        
+        $info = @getimagesize($this->filepath);
+        $this->type = ($info) ? $info[2]:$type;
+        $this->width = ($info) ? $info[0]:$width;
+        $this->height = ($info) ? $info[1]:$height;
     }
 
     static function fromUpload($param='upload')
@@ -78,32 +82,100 @@ class ImageFile
             throw new Exception(_('System error uploading file.'));
             return;
         }
-
-        $imagefile = new ImageFile($_FILES[$param]['tmp_name']);
-        $info = @getimagesize($imagefile->filename);
-
+        
+        $info = @getimagesize($_FILES[$param]['tmp_name']);
+        
         if (!$info) {
-            @unlink($imagefile->filename);
+            @unlink($_FILES[$param]['tmp_name']);
             throw new Exception(_('Not an image or corrupt file.'));
             return;
         }
+        
+        if ($info[2] !== IMAGETYPE_GIF &&
+            $info[2] !== IMAGETYPE_JPEG &&
+            $info[2] !== IMAGETYPE_PNG) {
+        
+            @unlink($_FILES[$param]['tmp_name']);
+            throw new Exception(_('Unsupported image file format.'));
+            return;
+        }
 
-        $imagefile->width = $info[0];
-        $imagefile->height = $info[1];
+        return new ImageFile(null, $_FILES[$param]['tmp_name']);
+    }
+    
+    function resize($size, $x = 0, $y = 0, $w = null, $h = null)
+    {
+        $w = ($w === null) ? $this->width:$w;
+        $h = ($h === null) ? $this->height:$h;
 
-        switch ($info[2]) {
-        case IMAGETYPE_GIF:
-        case IMAGETYPE_JPEG:
-        case IMAGETYPE_PNG:
-            $imagefile->type = $info[2];
+        if (!file_exists($this->filepath)) {
+            throw new Exception(_('Lost our file.'));
+            return;
+        }
+
+        switch ($this->type) {
+         case IMAGETYPE_GIF:
+            $image_src = imagecreatefromgif($this->filepath);
             break;
-        default:
-            @unlink($imagefile->filename);
-            throw new Exception(_('Unsupported image file format.'));
+         case IMAGETYPE_JPEG:
+            $image_src = imagecreatefromjpeg($this->filepath);
+            break;
+         case IMAGETYPE_PNG:
+            $image_src = imagecreatefrompng($this->filepath);
+            break;
+         default:
+            throw new Exception(_('Unknown file type'));
+            return;
+        }
+
+        $image_dest = imagecreatetruecolor($size, $size);
+        
+        if ($this->type == IMAGETYPE_GIF || $this->type == IMAGETYPE_PNG) {
+
+            $transparent_idx = imagecolortransparent($image_src);
+            
+            if ($transparent_idx >= 0) {
+                
+                $transparent_color = imagecolorsforindex($image_src, $transparent_idx);
+                $transparent_idx = imagecolorallocate($image_dest, $transparent_color['red'], $transparent_color['green'], $transparent_color['blue']);
+                imagefill($image_dest, 0, 0, $transparent_idx);
+                imagecolortransparent($image_dest, $transparent_idx);
+                
+            } elseif ($this->type == IMAGETYPE_PNG) {
+                
+                imagealphablending($image_dest, false);
+                $transparent = imagecolorallocatealpha($image_dest, 0, 0, 0, 127);
+                imagefill($image_dest, 0, 0, $transparent);
+                imagesavealpha($image_dest, true);
+                
+            }
+        }
+
+        imagecopyresampled($image_dest, $image_src, 0, 0, $x, $y, $size, $size, $w, $h);
+
+        $outname = common_avatar_filename($this->id,
+                                          image_type_to_extension($this->type),
+                                          $size,
+                                          common_timestamp());
+
+        $outpath = common_avatar_path($outname);
+
+        switch ($this->type) {
+         case IMAGETYPE_GIF:
+            imagegif($image_dest, $outpath);
+            break;
+         case IMAGETYPE_JPEG:
+            imagejpeg($image_dest, $outpath);
+            break;
+         case IMAGETYPE_PNG:
+            imagepng($image_dest, $outpath);
+            break;
+         default:
+            throw new Exception(_('Unknown file type'));
             return;
         }
 
-        return $imagefile;
+        return $outname;
     }
 
     function unlink()