aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/lib/filestore.php31
-rw-r--r--mod/profile/actions/iconupload.php14
2 files changed, 21 insertions, 24 deletions
diff --git a/engine/lib/filestore.php b/engine/lib/filestore.php
index a7f395704..b9bf5bf39 100644
--- a/engine/lib/filestore.php
+++ b/engine/lib/filestore.php
@@ -56,12 +56,13 @@ function get_uploaded_file($input_name) {
* @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.
+ * @param true|false $upscale Resize images smaller than $maxwidth x $maxheight?
* @return false|mixed The contents of the resized image, or false on failure
*/
-function get_resized_image_from_uploaded_file($input_name, $maxwidth, $maxheight, $square = false) {
+function get_resized_image_from_uploaded_file($input_name, $maxwidth, $maxheight, $square = false, $upscale = 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, $square);
+ return get_resized_image_from_existing_file($_FILES[$input_name]['tmp_name'], $maxwidth, $maxheight, $square, 0, 0, 0, 0, $upscale);
}
return false;
}
@@ -235,7 +236,7 @@ function get_image_resize_parameters($width, $height, $options) {
} else {
// non-square new image
$new_width = $maxwidth;
- $new_height = $maxwidth;
+ $new_height = $maxheight;
// maintain aspect ratio of original image/crop
if (($selection_height / (float)$new_height) > ($selection_width / (float)$new_width)) {
@@ -254,21 +255,17 @@ function get_image_resize_parameters($width, $height, $options) {
}
}
- // check for upscaling
- if (!$upscale && ($height < $new_height || $width < $new_width)) {
- // determine if we can scale it down at all
- // (ie, if only one dimension is too small)
- // if not, just use original size.
- if ($height < $new_height && $width < $new_width) {
- $ratio = 1;
- } elseif ($height < $new_height) {
- $ratio = $new_width / $width;
- } elseif ($width < $new_width) {
- $ratio = $new_height / $height;
+ if (!$upscale && ($selection_height < $new_height || $selection_width < $new_width)) {
+ // we cannot upscale and selected area is too small so we decrease size of returned image
+ if ($square) {
+ $new_height = $selection_height;
+ $new_width = $selection_width;
+ } else {
+ if ($selection_height < $new_height && $selection_width < $new_width) {
+ $new_height = $selection_height;
+ $new_width = $selection_width;
+ }
}
-
- $selection_height = $height;
- $selection_width = $width;
}
$params = array(
diff --git a/mod/profile/actions/iconupload.php b/mod/profile/actions/iconupload.php
index 23d1967a6..fe4efbfea 100644
--- a/mod/profile/actions/iconupload.php
+++ b/mod/profile/actions/iconupload.php
@@ -23,19 +23,19 @@ $profile_owner_guid = $profile_owner->getGUID();
//@todo make this configurable?
$icon_sizes = array(
- 'topbar' => array('w'=>16, 'h'=>16, 'square'=>TRUE),
- 'tiny' => array('w'=>25, 'h'=>25, 'square'=>TRUE),
- 'small' => array('w'=>40, 'h'=>40, 'square'=>TRUE),
- 'medium' => array('w'=>100, 'h'=>100, 'square'=>TRUE),
- 'large' => array('w'=>200, 'h'=>200, 'square'=>FALSE),
- 'master' => array('w'=>1600, 'h'=>1600, 'square'=>FALSE)
+ 'topbar' => array('w'=>16, 'h'=>16, 'square'=>TRUE, 'upscale'=>TRUE),
+ 'tiny' => array('w'=>25, 'h'=>25, 'square'=>TRUE, 'upscale'=>TRUE),
+ 'small' => array('w'=>40, 'h'=>40, 'square'=>TRUE, 'upscale'=>TRUE),
+ 'medium' => array('w'=>100, 'h'=>100, 'square'=>TRUE, 'upscale'=>TRUE),
+ 'large' => array('w'=>200, 'h'=>200, 'square'=>FALSE, 'upscale'=>FALSE),
+ 'master' => array('w'=>1600, 'h'=>1600, 'square'=>FALSE, 'upscale'=>FALSE)
);
// get the images and save their file handlers into an array
// so we can do clean up if one fails.
$files = array();
foreach ($icon_sizes as $name => $size_info) {
- $resized = get_resized_image_from_uploaded_file('profileicon', $size_info['w'], $size_info['h'], $size_info['square']);
+ $resized = get_resized_image_from_uploaded_file('profileicon', $size_info['w'], $size_info['h'], $size_info['square'], $size_info['upscale']);
if ($resized) {
//@todo Make these actual entities. See exts #348.