2015-03-24 2 views
0

Так Heres моего кодаВозникли проблемы с созданием кэша изображений с 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; 
} 

И это дает мне это: Intervention \ 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

Если вы используете 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.

+0

Можете ли вы помочь со следующей проблемой? Я редактировал вопрос. Спасибо за помощь! – DaveLV2

+0

@ DaveLV2 Я обновил свой ответ с решением для вас второй вопрос. – Bogdan

+0

Нет, нет. К кэшированному/измененному изображению. – DaveLV2