Source d'Image non lisible dans Laravel 5.2-image D'Intervention
j'ai un petit problème concernant le processus de redimensionnement d'une image donnée, j'essaye de soumettre un formulaire contenant un type d'entrée -- > fichier< -- j'ai pu télécharger une image sans la redimensionner, après cela j'ai décidé de redimensionner cette image donc j'ai installé la bibliothèque D'Image D'Intervention en utilisant:
composer require intervention/image
puis j'ai intégré la bibliothèque dans mon cadre Laravel
InterventionImageImageServiceProvider::class
'Image' => InterventionImageFacadesImage::class
et enfin je l'ai configuré comme suit
php artisan vendor:publish --provider="InterventionImageImageServiceProviderLaravel5"
mon contrôleur est comme le suivant
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesInput;
use Image;
class ProjectController extends Controller{
public function project(Request $request){
$file = Input::file('file');
$fileName = time().'-'.$file->getClientOriginalName();
$file -> move('uploads', $fileName);
$img=Image::make('public/uploads/', $file->getRealPath())->resize(320, 240)->save('public/uploads/',$file->getClientOriginalName());
}
}
mais au lieu de redimensionner le pic l'exception suivante est lancée
NotReadableException in AbstractDecoder.php line 302:
Image source not readable
4 réponses
ne devrait-il pas être Image::make($file->getRealPath())
au lieu de Image::make('public/uploads/', $file->getRealPath())
?
Image::make()
ne semble pas prendre deux arguments, donc cela pourrait être votre problème.
Essayez ceci:
$file = Input::file('file');
$fileName = time() . '-' . $file->getClientOriginalName();
$file->move('uploads', $fileName);
$img = Image::make($file->getRealPath())
->resize(320, 240)
->save('public/uploads/', $file->getClientOriginalName());
Ou si vous voulez le faire sans avoir à déplacer le fichier d'abord, essayez ceci:
$file = Input::file('file');
$img = Image::make($file)
->resize(320, 240)
->save('public/uploads/', $file->getClientOriginalName());
L5.2
il n'est pas directement possible d'obtenir l'image de Input
façade. Pour cela, nous devons d'abord stocker l'image sur le serveur et ensuite donner le chemin dans Image
façade pour effectuer des opérations sur l'image.
Code goes like this:
if ($request->hasFile('picture') ) {
$destinationPath = public_path('uploads/user');
$photoname = date("YmdHis");
$file_extention = '.'.$request->file('picture')->getClientOriginalExtension();
$photo = $photoname.$file_extention;
$file_check = $request->file('picture')->move($destinationPath, $photo);
$thumb_path = $destinationPath.'/thumbnail/'.$photo;
$new_filePath = $destinationPath.'/'.$photo;
$assets_path = url('uploads/user/');
$img = Image::make($assets_path.'/'.$photo)->fit(100)->save($thumb_path,40);
$data['picture'] = $photo;
}
je cherchais une solution directe i.e. comme il était possible auparavant de prendre l'image directement de Input
façade. Si l'un d'entre vous a une solution directe, montrez votre code ici et je vous récompenserai pour cette prime. Acclamation.
télécharger un fichier et le redimensionner avant de le sauvegarder est aussi simple que cela: (Sans validation ni contrôle)
vous pouvez passer directement une instance de UploadedFile à InterventionImage:: make ()
public function upload(Request $request)
{
$file = $request->file('file');
$filename = $file->getClientOriginalName();
$img = \Image::make($file);
$img->resize(320, 240)->save(public_path('uploads/'.$filename))
}
si vous voulez sauvegarder la taille d'origine et l'image redimensionnée:
$img->save(public_path('uploads/'.$filename))
->resize(320, 240)
->save(public_path('uploads/thumb_'.$filename));
cela vient d'être testé sur la dernière version 5.2 Avec is 5.2.45
[EDIT:]
Si vous appelez
$file->move();
Ne pas utiliser
$file->getRealPath()
après, parce que cela retournera false après avoir appelé move ()
$filename = $file->getClientOriginalName();
$file->move('uploads', $filename);
dd($file->getRealPath());
Ce problème est survenu lorsque vous redimensionnez l'image après l'avoir déplacé
$file->move('uploads', $fileName);
$file->getRealPath()
retour false
après avoir déplacé l'image. Vous devez redimensionner l'image avant le processus de déplacement. C'est ça ;)
$img=Image::make('public/uploads/', $file->getRealPath())->resize(320, 240)->save('public/uploads/',$file->getClientOriginalName());
$file->move('uploads', $fileName);