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

そして、それは私にこれを与えます:介入\画像\例外\ 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へのリンクを取得するにはどうすればよいですか? だから私は img タグの src に配置できます。

4

1 に答える 1

1

sourceメソッドのパラメーターとして URL を使用する場合は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 に答える