From 8ea75b0fdf8b706887a3e9b4378979e31887dc42 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sun, 18 Oct 2015 18:48:51 +0100 Subject: [PATCH] Image uploads now quicker, and image sized reduced with links to originals --- app/Http/Controllers/ImageController.php | 39 ++++++++++--- bower.json | 2 +- .../assets/js/components/image-manager.vue | 25 +++++--- resources/assets/js/pages/page-form.js | 58 ++++++++++++++++++- 4 files changed, 104 insertions(+), 20 deletions(-) diff --git a/app/Http/Controllers/ImageController.php b/app/Http/Controllers/ImageController.php index df4f5543d..3e82bb4c0 100644 --- a/app/Http/Controllers/ImageController.php +++ b/app/Http/Controllers/ImageController.php @@ -39,27 +39,40 @@ class ImageController extends Controller $images = $this->image->orderBy('created_at', 'desc') ->skip($page * $pageSize)->take($pageSize)->get(); foreach ($images as $image) { - $image->thumbnail = $this->getThumbnail($image, 150, 150); + $this->loadSizes($image); } $hasMore = $this->image->orderBy('created_at', 'desc') ->skip(($page + 1) * $pageSize)->take($pageSize)->count() > 0; return response()->json([ - 'images' => $images, + 'images' => $images, 'hasMore' => $hasMore ]); } + /** + * Loads the standard thumbnail sizes for an image. + * @param Image $image + */ + private function loadSizes(Image $image) + { + $image->thumbnail = $this->getThumbnail($image, 150, 150); + $image->display = $this->getThumbnail($image, 840, 0, true); + } + /** * Get the thumbnail for an image. - * @param $image - * @param int $width - * @param int $height + * If $keepRatio is true only the width will be used. + * @param $image + * @param int $width + * @param int $height + * @param bool $keepRatio * @return string */ - public function getThumbnail($image, $width = 220, $height = 220) + public function getThumbnail($image, $width = 220, $height = 220, $keepRatio = false) { $explodedPath = explode('/', $image->url); - array_splice($explodedPath, 4, 0, ['thumbs-' . $width . '-' . $height]); + $dirPrefix = $keepRatio ? 'scaled-' : 'thumbs-'; + array_splice($explodedPath, 4, 0, [$dirPrefix . $width . '-' . $height]); $thumbPath = implode('/', $explodedPath); $thumbFilePath = public_path() . $thumbPath; @@ -70,7 +83,14 @@ class ImageController extends Controller // Otherwise create the thumbnail $thumb = ImageTool::make(public_path() . $image->url); - $thumb->fit($width, $height); + if($keepRatio) { + $thumb->resize($width, null, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + }); + } else { + $thumb->fit($width, $height); + } // Create thumbnail folder if it does not exist if (!file_exists(dirname($thumbFilePath))) { @@ -107,7 +127,7 @@ class ImageController extends Controller $this->image->created_by = auth()->user()->id; $this->image->updated_by = auth()->user()->id; $this->image->save(); - $this->image->thumbnail = $this->getThumbnail($this->image, 150, 150); + $this->loadSizes($this->image); return response()->json($this->image); } @@ -126,6 +146,7 @@ class ImageController extends Controller $image = $this->image->findOrFail($imageId); $image->fill($request->all()); $image->save(); + $this->loadSizes($image); return response()->json($this->image); } diff --git a/bower.json b/bower.json index 06bed0478..9ce1401d9 100644 --- a/bower.json +++ b/bower.json @@ -14,7 +14,7 @@ "tests" ], "dependencies": { - "tinymce-dist": "~4.2.1", + "tinymce-dist": "~4.2.6", "bootstrap": "~3.3.5", "jquery-sortable": "~0.9.13", "material-design-iconic-font": "~2.1.1" diff --git a/resources/assets/js/components/image-manager.vue b/resources/assets/js/components/image-manager.vue index d489768bf..f81bf02d1 100644 --- a/resources/assets/js/components/image-manager.vue +++ b/resources/assets/js/components/image-manager.vue @@ -1,6 +1,6 @@