0

所以这是我的代码

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

它给了我这个:Intervention \ Image \ Exception \ 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;
}

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

4

1 回答 1

1

如果您打算使用 URL 作为方法的source参数,请make确保它也包含方案,否则它将认为它是本地文件路径。因此,摆脱http://从 URL 中剥离的部分,只需使用:

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.

于 2015-03-24T22:15:18.313 回答