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

Having problems with creating image cache with Intervention \ Image

这是我的代码

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;
}

它给了我这个: 干预\图片\异常\NotReadableException 图片来源不可读

我真的不知道这里出了什么问题..

感谢帮助!

编辑------------------------

我是这样修复的:

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;
}

但是我现在如何将 link 获取到 img?所以我可以将它放在 src 中作为 img 标签。

如果您要使用 URL 作为 make 方法的 source 参数,请确保它也包括方案,否则它会考虑是本地文件路径。所以摆脱你从 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;
}

要return 图像的缓存版本,您必须有一个专用路由来检索调整大小的图像。应该这样做:

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();
});

现在在你的 blade 模板文件中生成 URL 像这样:

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

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

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

而不是

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

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