使用Intervention \ Image创建图像缓存时遇到问题

时间:2015-03-24 21:38:58

标签: laravel intervention

所以继承我的代码

public static function getImageThumb($link) {
    $domain = substr(Request::root(), 7);
    if(starts_with(Request::root(), 'http://')) {
        $domain = substr(Request::root(), 7);
    }
    $link = $domain.$link; // This is prety much something like this domain.name/uploads/image/13_0.jpeg
    $img = Image::cache(function ($image) use ($link) {
        return $image->make($link)->resize(230, 140);
    }, 5, true);
    return $img;
}

它给了我这个: 干预\ Image \ Exception \ NotReadableException 图像源不可读

我真的不知道这里有什么不对..

感谢您的帮助!

EDIT -------------------------

我这样修好了:

public static function getImageThumb($link) {
    $link = trim($link, '/');

    $img = Image::cache(function ($image) use ($link) {
        return $image->make($link)->resize(230, 140);
    }, 5, true);

    return $img;
}

但是我现在如何获得img的链接?所以我可以把它放在src中用于img标签。

1 个答案:

答案 0 :(得分:1)

如果您要使用URL作为source方法的make参数,请确保它也包含该方案,否则它会将其视为本地文件路径。因此,除去从URL中剥离http://的部分,只需使用:

public static function getImageThumb($link)
{
    $link = Request::root() . $link;

    $img = Image::cache(function ($image) use ($link) {
        return $image->make($link)->resize(230, 140);
    }, 5, true);

    return $img;
}

此外,由于图像不是来自远程域,因此从文件系统中读取它更有意义,而不是为它发出HTTP请求:

public static function getImageThumb($link)
{
    $path = public_path() . $link;

    $img = Image::cache(function ($image) use ($path) {
        return $image->make($path)->resize(230, 140);
    }, 5, true);

    return $img;
}

要返回图像的缓存版本,您必须拥有一条专用路径来检索已调整大小的图像。这样的事情应该做:

Route::get('/images/{link}', function ($link)
{
    // Repo will be the class implementing your getImageThumb method
    $img = Repo::getImageThumb($link);

    // This makes sure the HTTP response contains the necessary image headers
    return $img->response();
});

现在,在您的刀片式服务器模板文件中,您可以生成如下所示的URL:

<img src="{{ asset('/images/' . $link) }}">

通过将/images添加到实际的链接路径,您将访问将使用图像缓存的路由(如果可用)。所以你的链接现在看起来像这样:

http://domain.name/images/uploads/image/13_0.jpeg

而不是

http://domain.name/uploads/image/13_0.jpeg

当然,你可以使用你喜欢的任何东西作为路径前缀,不一定是/images