From 71d3cdc4f8b21cfa8ffd69746b80bfe18ed54c18 Mon Sep 17 00:00:00 2001 From: ben Date: Tue, 17 Jun 2008 09:45:23 +0000 Subject: Fixed #33 - all profile icons except for the largest size are cropped to squares. Additionally, the image resampling functions now take an extra boolean parameter to specify squareness (or not). git-svn-id: https://code.elgg.org/elgg/trunk@943 36083f99-b078-4883-b0ff-0f9b5a30f544 --- engine/lib/filestore.php | 42 ++++++++++++++++++++++++++++++-------- mod/profile/actions/iconupload.php | 10 ++++----- mod/profile/languages/en.php | 1 + 3 files changed, 40 insertions(+), 13 deletions(-) diff --git a/engine/lib/filestore.php b/engine/lib/filestore.php index 33f5cbaaf..061fe9f4f 100644 --- a/engine/lib/filestore.php +++ b/engine/lib/filestore.php @@ -593,13 +593,14 @@ * @param string $input_name The name of the file input field on the submission form * @param int $maxwidth The maximum width of the resized image * @param int $maxheight The maximum height of the resized image + * @param true|false $square If set to true, will take the smallest of maxwidth and maxheight and use it to set the dimensions on all size; the image will be cropped. * @return false|mixed The contents of the resized image, or false on failure */ - function get_resized_image_from_uploaded_file($input_name, $maxwidth, $maxheight) { + function get_resized_image_from_uploaded_file($input_name, $maxwidth, $maxheight, $square = false) { // If our file exists ... if (isset($_FILES[$input_name]) && $_FILES[$input_name]['error'] == 0) { - return get_resized_image_from_existing_file($_FILES[$input_name]['tmp_name'], $maxwidth, $maxheight); + return get_resized_image_from_existing_file($_FILES[$input_name]['tmp_name'], $maxwidth, $maxheight, $square); } @@ -612,10 +613,11 @@ * * @param string $input_name The name of the file input field on the submission form * @param int $maxwidth The maximum width of the resized image - * @param int $maxheight The maximum height of the resized image + * @param int $maxheight The maximum height of the resized image + * @param true|false $square If set to true, will take the smallest of maxwidth and maxheight and use it to set the dimensions on all size; the image will be cropped. * @return false|mixed The contents of the resized image, or false on failure */ - function get_resized_image_from_existing_file($input_name, $maxwidth, $maxheight) { + function get_resized_image_from_existing_file($input_name, $maxwidth, $maxheight, $square = false) { // Get the size information from the image if ($imgsizearray = getimagesize($input_name)) { @@ -628,6 +630,19 @@ $height = $imgsizearray[1]; $newwidth = $width; $newheight = $height; + + // Square the image dimensions if we're wanting a square image + if ($square) { + if ($width < $height) { + $height = $width; + } else { + $width = $height; + } + + $newwidth = $width; + $newheight = $height; + + } if ($width > $maxwidth) { $newheight = floor($height * ($maxwidth / $width)); @@ -648,11 +663,22 @@ if (array_key_exists($imgsizearray['mime'],$accepted_formats)) { $function = "imagecreatefrom" . $accepted_formats[$imgsizearray['mime']]; - $newimage = imagecreatetruecolor($newwidth,$newheight); - if (is_callable($function) && $oldimage = $function($input_name)) { + $newimage = imagecreatetruecolor($newwidth,$newheight); - // Resize and return the image contents! - imagecopyresampled($newimage, $oldimage, 0,0,0,0,$newwidth,$newheight,$width,$height); + if (is_callable($function) && $oldimage = $function($input_name)) { + + // Crop the image if we need a square + if ($square) { + $widthoffset = floor(($imgsizearray[0] - $width) / 2); + $heightoffset = floor(($imgsizearray[1] - $height) / 2); + } else { + $widthoffset = 0; + $heightoffset = 0; + }//else { + // Resize and return the image contents! + imagecopyresampled($newimage, $oldimage, 0,0,$widthoffset,$heightoffset,$newwidth,$newheight,$width,$height); + //} + // imagecopyresized($newimage, $oldimage, 0,0,0,0,$newwidth,$newheight,$width,$height); ob_start(); imagejpeg($newimage, null, 90); diff --git a/mod/profile/actions/iconupload.php b/mod/profile/actions/iconupload.php index 7c7e95f37..a6e35e4f8 100644 --- a/mod/profile/actions/iconupload.php +++ b/mod/profile/actions/iconupload.php @@ -15,10 +15,10 @@ isloggedin() ) { - $tiny = get_resized_image_from_uploaded_file('profileicon',25,25); - $small = get_resized_image_from_uploaded_file('profileicon',50,50); - $medium = get_resized_image_from_uploaded_file('profileicon',100,100); - $large = get_resized_image_from_uploaded_file('profileicon',300,300); + $tiny = get_resized_image_from_uploaded_file('profileicon',25,25, true); + $small = get_resized_image_from_uploaded_file('profileicon',40,40, true); + $medium = get_resized_image_from_uploaded_file('profileicon',100,100, true); + $large = get_resized_image_from_uploaded_file('profileicon',200,200); if ($small !== false && $medium !== false @@ -40,7 +40,7 @@ $filehandler->close(); $filehandler->setFilename("profile/" . $_SESSION['user']->username . "tiny.jpg"); $filehandler->open("write"); - $filehandler->write($small); + $filehandler->write($tiny); $filehandler->close(); $_SESSION['user']->icontime = time(); diff --git a/mod/profile/languages/en.php b/mod/profile/languages/en.php index 85fa7c809..ffe609eec 100644 --- a/mod/profile/languages/en.php +++ b/mod/profile/languages/en.php @@ -38,6 +38,7 @@ */ 'profile:saved' => "Your profile was successfully saved.", + 'profile:icon:uploaded' => "Your profile icon was successfully uploaded.", /** * Error messages -- cgit v1.2.3