【发布时间】:2015-05-19 20:45:59
【问题描述】:
在 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 中维护。
示例:
- 文件/图像/image.jpg
- 文件/图像/标题/图像.jpg
- 文件/图像/背景/颜色/图像.jpg
- img/common/logo.png
这些图像 url 是从 mysql 表记录中加载的。
加载此类图片时:
// template
<img src="{{"imager/files/images/image.jpg"}}"/>
该路线不再有效。毕竟,files、images 和 images.jpg 都是 url 段,它们的数量可能不同。
图片url(粗体)应作为一个变量处理:
Route::get('imager/files/images/image.jpg', function ($src = false)
然后我应该能够将尺寸和裁剪参数传递给偏离路线。因为 img url 的长度可能会有所不同,所以我假设我可以使用 ?w=100&h=50&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"}}"/>
这行得通。
【问题讨论】:
-
也许解决这个问题的最好方法是使用 mod_rewrite(如果你在 Apache 上)并执行类似的操作:RewriteRule ^imager/([.*])\.[jpg|gif| png]$ imager?src=$1
-
我在一个旧的 Laravel 4 项目中也遇到了这个问题。我将所有路径和子路径添加到图像缓存配置文件中的路径部分。
标签: php image caching laravel laravel-5