在Laravel 5中摆弄Intervention 2.0。我想要的是操纵图像(大小和裁剪)并使用干预Image Caching来缓存图像。我基本上试图实现的是旧的(和不安全的)timthumb.php的功能。
我开始以此为例:
// routes.php
Route::get('imager/{src?}', function ($src)
{
$cacheimage = Image::cache(function($image) use ($src) {
return $image->make("files/image/".$src)->resize(100,50);
}, 10, true);
return Response::make($cacheimage, 200, array('Content-Type' => 'image/jpeg'));
});
当我加载这样的图片时:
// template
<img src="{{"imager/image.jpg"}}"/>
工作正常。
但是......在我的情况下,图像可以位于不同的(子)目录中,有时可以位于多个深层。它们由网站管理员在我的CMS中维护。
示例:
这些图片网址是从mysql表记录中加载的。
加载此类图片时
// template
<img src="{{"imager/files/images/image.jpg"}}"/>
该路线不再有效。毕竟,文件,图片和 images.jpg 都是网址段,它们的数量可能不同。
图片网址(粗体)应作为一个变量处理:
路线:: get(&#39; imager / files / images / image.jpg &#39;,功能($ src = false)
然后我应该能够通过大小和裁剪参数。因为img url长度可能会有所不同,我假设我可以通过查询来传递参数,例如?w = 100&amp; h = 50&amp; c = true或其他什么?
更新
当我为图片网址使用查询参数时:
Route::get('imager', function ()
{
$src = Input::get('src', 1);
$cacheimage = Image::cache(function($image) use ($src) {
return $image->make($src)->resize(100,100);
}, 1, false); // one minute cache expiry
return Response::make($cacheimage, 200, array('Content-Type' => 'image/jpeg'));
});
// template
<img src="{{"imager?src=files/images/image.jpg"}}"/>
这很有效。
答案 0 :(得分:3)
很简单。你只需要告诉Laravel你的图像参数由字母,斜线,短划线,下划线和点('[A-Za-z0-9\/\.\-\_]+'
)组成,因为默认情况下框架匹配除了斜杠/
之外的所有内容。
Route::get('imager/{image?}', function($src) {
$cachedImage = Image::cache(function($image) use ($src) {
return $image->make($src)->resize(100,100);
}, 1, false);
return Response::make($cachedImage, 200, ['Content-Type' => 'image/jpeg']);
})->where('image', '[A-Za-z0-9\/\.\-\_]+');
您可以在documentation中找到有关参数绑定的更多信息。
答案 1 :(得分:0)
现在您可以使用URL based image manipulation:
在Laravel应用程序中,可以使用URL动态地操作图像。图像的操作版本将存储在缓存中,并且无需资源密集型GD操作即可直接加载。
图片仅需上传一次。当通过HTTP请求访问文件时,诸如调整大小或裁剪的所有操作将在以后处理:
http://yourhost.com/{route-name}/{template-name}/{file-name}