summaryrefslogtreecommitdiff
path: root/app/Model
diff options
context:
space:
mode:
authorFrederic Guillot <fred@kanboard.net>2015-04-11 13:47:31 -0400
committerFrederic Guillot <fred@kanboard.net>2015-04-11 13:47:31 -0400
commit3311061d10f94048c933a1beb3a3e7c408b40fcb (patch)
tree5625346bbbfdb236325d9815d80e7238b651d612 /app/Model
parentaea3a352aa3a821c5c671e29bd730af79ab599eb (diff)
Improve pull-request (move thumbnail generation function)
Diffstat (limited to 'app/Model')
-rw-r--r--app/Model/File.php86
1 files changed, 81 insertions, 5 deletions
diff --git a/app/Model/File.php b/app/Model/File.php
index 52f756c6..5da5c014 100644
--- a/app/Model/File.php
+++ b/app/Model/File.php
@@ -80,6 +80,7 @@ class File extends Base
* @param string $name Filename
* @param string $path Path on the disk
* @param bool $is_image Image or not
+ * @param integer $size File size
* @return bool
*/
public function create($task_id, $name, $path, $is_image, $size)
@@ -96,7 +97,7 @@ class File extends Base
'is_image' => $is_image ? '1' : '0',
'size' => $size,
'user_id' => $this->userSession->getId(),
- 'date' => time(),
+ 'date' => time(),
));
}
@@ -122,11 +123,11 @@ class File extends Base
self::TABLE.'.size',
User::TABLE.'.username',
User::TABLE.'.name as user_name'
- )
+ )
->join(User::TABLE, 'id', 'user_id')
->eq('task_id', $task_id)
- ->asc(self::TABLE.'.name')
- ->findAll();
+ ->asc(self::TABLE.'.name')
+ ->findAll();
}
/**
@@ -276,7 +277,7 @@ class File extends Base
$original_filename,
$destination_filename,
$this->isImage($original_filename),
- $_FILES[$form_name]['size'][$key]
+ $_FILES[$form_name]['size'][$key]
);
}
}
@@ -285,4 +286,79 @@ class File extends Base
return count(array_unique($result)) === 1;
}
+
+ /**
+ * Generate a jpeg thumbnail from an image (output directly the image)
+ *
+ * @access public
+ * @param string $filename Source image
+ * @param integer $resize_width Desired image width
+ * @param integer $resize_height Desired image height
+ */
+ public function generateThumbnail($filename, $resize_width, $resize_height)
+ {
+ $metadata = getimagesize($filename);
+ $src_width = $metadata[0];
+ $src_height = $metadata[1];
+ $dst_y = 0;
+ $dst_x = 0;
+
+ if (empty($metadata['mime'])) {
+ return;
+ }
+
+ if ($resize_width == 0 && $resize_height == 0) {
+ $resize_width = 100;
+ $resize_height = 100;
+ }
+
+ if ($resize_width > 0 && $resize_height == 0) {
+ $dst_width = $resize_width;
+ $dst_height = floor($src_height * ($resize_width / $src_width));
+ $dst_image = imagecreatetruecolor($dst_width, $dst_height);
+ }
+ elseif ($resize_width == 0 && $resize_height > 0) {
+ $dst_width = floor($src_width * ($resize_height / $src_height));
+ $dst_height = $resize_height;
+ $dst_image = imagecreatetruecolor($dst_width, $dst_height);
+ }
+ else {
+
+ $src_ratio = $src_width / $src_height;
+ $resize_ratio = $resize_width / $resize_height;
+
+ if ($src_ratio <= $resize_ratio) {
+ $dst_width = $resize_width;
+ $dst_height = floor($src_height * ($resize_width / $src_width));
+
+ $dst_y = ($dst_height - $resize_height) / 2 * (-1);
+ }
+ else {
+ $dst_width = floor($src_width * ($resize_height / $src_height));
+ $dst_height = $resize_height;
+
+ $dst_x = ($dst_width - $resize_width) / 2 * (-1);
+ }
+
+ $dst_image = imagecreatetruecolor($resize_width, $resize_height);
+ }
+
+ switch ($metadata['mime']) {
+ case 'image/jpeg':
+ case 'image/jpg':
+ $src_image = imagecreatefromjpeg($filename);
+ break;
+ case 'image/png':
+ $src_image = imagecreatefrompng($filename);
+ break;
+ case 'image/gif':
+ $src_image = imagecreatefromgif($filename);
+ break;
+ default:
+ return;
+ }
+
+ imagecopyresampled($dst_image, $src_image, $dst_x, $dst_y, 0, 0, $dst_width, $dst_height, $src_width, $src_height);
+ imagejpeg($dst_image);
+ }
}