Save a thumbnail image when uploading an image file into the file attachments system. Currently hardcoded to 100x75, needs aspect-sensitivity etc.

This commit is contained in:
Brion Vibber 2010-11-08 17:20:04 -08:00
parent dc497ed090
commit c36fecb794
2 changed files with 61 additions and 4 deletions

View File

@ -48,12 +48,34 @@ class File_thumbnail extends Memcached_DataObject
return array(false, false, false); return array(false, false, false);
} }
function saveNew($data, $file_id) { /**
* Save oEmbed-provided thumbnail data
*
* @param object $data
* @param int $file_id
*/
public static function saveNew($data, $file_id) {
self::saveThumbnail($file_id,
$data->thumbnail_url,
$data->thumbnail_width,
$data->thumbnail_height);
}
/**
* Save a thumbnail record for the referenced file record.
*
* @param int $file_id
* @param string $url
* @param int $width
* @param int $height
*/
static function saveThumbnail($file_id, $url, $width, $height)
{
$tn = new File_thumbnail; $tn = new File_thumbnail;
$tn->file_id = $file_id; $tn->file_id = $file_id;
$tn->url = $data->thumbnail_url; $tn->url = $url;
$tn->width = intval($data->thumbnail_width); $tn->width = intval($width);
$tn->height = intval($data->thumbnail_height); $tn->height = intval($height);
$tn->insert(); $tn->insert();
} }
} }

View File

@ -48,11 +48,14 @@ class MediaFile
{ {
if ($user == null) { if ($user == null) {
$this->user = common_current_user(); $this->user = common_current_user();
} else {
$this->user = $user;
} }
$this->filename = $filename; $this->filename = $filename;
$this->mimetype = $mimetype; $this->mimetype = $mimetype;
$this->fileRecord = $this->storeFile(); $this->fileRecord = $this->storeFile();
$this->thumbnailRecord = $this->storeThumbnail();
$this->fileurl = common_local_url('attachment', $this->fileurl = common_local_url('attachment',
array('attachment' => $this->fileRecord->id)); array('attachment' => $this->fileRecord->id));
@ -102,6 +105,38 @@ class MediaFile
return $file; return $file;
} }
/**
* Generate and store a thumbnail image for the uploaded file, if applicable.
*
* @return File_thumbnail or null
*/
function storeThumbnail()
{
if (substr($this->mimetype, 0, strlen('image/')) != 'image/') {
// @fixme video thumbs would be nice!
return null;
}
try {
$image = new ImageFile($this->fileRecord->id,
File::path($this->filename));
} catch (Exception $e) {
// Unsupported image type.
return null;
}
$outname = File::filename($this->user->getProfile(), 'thumb-' . $this->filename, $this->mimetype);
$outpath = File::path($outname);
$width = 100;
$height = 75;
$image->resizeTo($outpath, $width, $height);
File_thumbnail::saveThumbnail($this->fileRecord->id,
File::url($outname),
$width,
$height);
}
function rememberFile($file, $short) function rememberFile($file, $short)
{ {
$this->maybeAddRedir($file->id, $short); $this->maybeAddRedir($file->id, $short);