Changement des filtersO
This commit is contained in:
parent
a34031f914
commit
9d190dbede
|
@ -8,6 +8,8 @@ return [
|
||||||
'small' => \Meoran\Images\Templates\Small::class,
|
'small' => \Meoran\Images\Templates\Small::class,
|
||||||
'medium' => \Meoran\Images\Templates\Medium::class,
|
'medium' => \Meoran\Images\Templates\Medium::class,
|
||||||
'large' => \Meoran\Images\Templates\Large::class,
|
'large' => \Meoran\Images\Templates\Large::class,
|
||||||
|
'custom' => \Meoran\Images\Templates\Custom::class,
|
||||||
|
|
||||||
),
|
),
|
||||||
'lifetime' => 10,
|
'lifetime' => 10,
|
||||||
'cache' => [
|
'cache' => [
|
||||||
|
|
|
@ -4,14 +4,21 @@ namespace Meoran\Images\Http\Controllers;
|
||||||
|
|
||||||
use Closure;
|
use Closure;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Intervention\Image\Constraint;
|
||||||
|
use Intervention\Image\Exception\ImageException;
|
||||||
|
use Intervention\Image\Exception\NotSupportedException;
|
||||||
use Laravel\Lumen\Routing\Controller as BaseController;
|
use Laravel\Lumen\Routing\Controller as BaseController;
|
||||||
use Meoran\Images\Model\Image;
|
use Meoran\Images\Model\Image;
|
||||||
|
use Meoran\Images\Templates\Custom;
|
||||||
|
use ReflectionFunction;
|
||||||
|
use ReflectionMethod;
|
||||||
|
|
||||||
class ImagesController extends BaseController
|
class ImagesController extends BaseController
|
||||||
{
|
{
|
||||||
|
|
||||||
public function get($filename, $template = null)
|
public function get($filename)
|
||||||
{
|
{
|
||||||
|
$template = app('request')->input('template');
|
||||||
if ($template === null) {
|
if ($template === null) {
|
||||||
$template = 'original';
|
$template = 'original';
|
||||||
}
|
}
|
||||||
|
@ -91,7 +98,10 @@ class ImagesController extends BaseController
|
||||||
return $template($image->make($path));
|
return $template($image->make($path));
|
||||||
} else {
|
} else {
|
||||||
// build from filter template
|
// build from filter template
|
||||||
return $image->make($path)->filter($template);
|
$res = $image->make($path)->filter($template);
|
||||||
|
if ($res === null) {
|
||||||
|
abort(404);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,9 +111,9 @@ class ImagesController extends BaseController
|
||||||
* @param string $template
|
* @param string $template
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
private function getTemplate($template)
|
private function getTemplate($templateName)
|
||||||
{
|
{
|
||||||
$template = config("image.templates.{$template}");
|
$template = config("image.templates.{$templateName}");
|
||||||
switch (true) {
|
switch (true) {
|
||||||
// closure template found
|
// closure template found
|
||||||
case is_callable($template):
|
case is_callable($template):
|
||||||
|
@ -114,9 +124,8 @@ class ImagesController extends BaseController
|
||||||
return new $template;
|
return new $template;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// template not found
|
return $this->getCustomTemplate($templateName);
|
||||||
abort(404);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,4 +141,11 @@ class ImagesController extends BaseController
|
||||||
'Etag' => md5($content)
|
'Etag' => md5($content)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getCustomTemplate($templateName)
|
||||||
|
{
|
||||||
|
$custom = new Custom();
|
||||||
|
$custom->actions = [$templateName];
|
||||||
|
return $custom;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ class ImagesServiceProvider extends ServiceProvider
|
||||||
'as' => 'uploadImage', 'uses' => '\Meoran\Images\Http\Controllers\ImagesController@upload'
|
'as' => 'uploadImage', 'uses' => '\Meoran\Images\Http\Controllers\ImagesController@upload'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->app->get('images/{filename}[/{template}]', [
|
$this->app->get('images/{filename}', [
|
||||||
'as' => 'getPicture', 'uses' => '\Meoran\Images\Http\Controllers\ImagesController@get'
|
'as' => 'getPicture', 'uses' => '\Meoran\Images\Http\Controllers\ImagesController@get'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Meoran\Images\Templates;
|
||||||
|
|
||||||
|
use Intervention\Image\Constraint;
|
||||||
|
use Intervention\Image\Exception\NotSupportedException;
|
||||||
|
use Intervention\Image\Filters\FilterInterface;
|
||||||
|
use Intervention\Image\Image;
|
||||||
|
|
||||||
|
class Custom implements FilterInterface
|
||||||
|
{
|
||||||
|
public $actions = null;
|
||||||
|
|
||||||
|
public function applyFilter(Image $image)
|
||||||
|
{
|
||||||
|
$actions = $this->actions;
|
||||||
|
if ($actions === null) {
|
||||||
|
$actions = app('request')->input('actions');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($actions)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($actions as $action) {
|
||||||
|
$exploded = explode(':',$action,2);
|
||||||
|
if (isset($exploded[0])) {
|
||||||
|
$methodName = $exploded[0];
|
||||||
|
}
|
||||||
|
$params= [];
|
||||||
|
if (isset($exploded[1])) {
|
||||||
|
$params = explode(',', $exploded[1]);
|
||||||
|
}
|
||||||
|
$params[] = function (Constraint $constraint) {
|
||||||
|
$constraint->upsize();
|
||||||
|
$constraint->aspectRatio();
|
||||||
|
};
|
||||||
|
$params = array_map(function($el) {
|
||||||
|
if (is_string($el) && $el === 'null') return null;
|
||||||
|
return $el;
|
||||||
|
},$params);
|
||||||
|
try {
|
||||||
|
call_user_func_array([$image,$methodName], $params);
|
||||||
|
} catch (NotSupportedException $exception) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $image;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue