J'utilise la façade de stockage pour stocker un avatar qui fonctionne bien, mais je souhaite redimensionner mon image comme je l'avais fait dans les versions précédentes de Laravel . Comment puis-je procéder??. Voici ce que j'ai jusqu'à présent (ne fonctionne pas)
$path = $request->file('createcommunityavatar');
$resize = Image::make($path)->fit(300);
$store = Storage::putFile('public/image', $resize);
$url = Storage::url($store);
Message d'erreur:
Command (hashName) is not available for driver (Gd).
Vous essayez de passer dans putFile mauvais objet. Cette méthode attend l'objet File (pas Image).
$path = $request->file('createcommunityavatar');
// returns \Intervention\Image\Image - OK
$resize = Image::make($path)->fit(300);
// expects 2nd arg - \Illuminate\Http\UploadedFile - ERROR, because Image does not have hashName method
$store = Storage::putFile('public/image', $resize);
$url = Storage::url($store);
Ok, maintenant que nous comprenons la raison principale, corrigeons le code
// returns Intervention\Image\Image
$resize = Image::make($path)->fit(300)->encode('jpg');
// calculate md5 hash of encoded image
$hash = md5($resize->__toString());
// use hash as a name
$path = "images/{$hash}.jpg";
// save it locally to ~/public/images/{$hash}.jpg
$resize->save(public_path($path));
// $url = "/images/{$hash}.jpg"
$url = "/" . $path;
Imaginons que vous souhaitiez utiliser la façade de stockage:
// does not work - Storage::putFile('public/image', $resize);
// Storage::put($path, $contents, $visibility = null)
Storage::put('public/image/myUniqueFileNameHere.jpg', $resize->__toString());
Je le fais de cette façon:
Remarque: vous pouvez bien entendu le modifier en fonction de vos besoins.
$file = $request->file('portfolio_thumb_image');
$image = Image::make($file);
$image->resize(570, 326, function ($constraint) {
$constraint->aspectRatio();
});
$thumbnail_image_name = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME).'.'.$file->getClientOriginalExtension();
$image->save(public_path('images/'.$thumbnail_image_name));
$saved_image_uri = $image->dirname.'/'.$image->basename;
//Now use laravel filesystem.
$uploaded_thumbnail_image = Storage::putFileAs('public/thumbnails/'.$portfolio_returned->id, new File($saved_image_uri), $thumbnail_image_name);
//Now delete temporary intervention image as we have moved it to Storage folder with Laravel filesystem.
$image->destroy();
unlink($saved_image_uri);
La méthode put fonctionne avec le résultat de l 'intervention Image . La méthode putFile accepte les instances Illuminate\Http\File ou Illuminate\Http\UploadedFile.
$photo = Image::make($request->file('photo'))
->resize(400, null, function ($constraint) { $constraint->aspectRatio(); } )
->encode('jpg',80);
Storage::disk('public')->put( 'photo.jpg', $photo);
Le code ci-dessus redimensionne le fichier téléchargé à une largeur de 400 px tout en maintenant les proportions. Encode ensuite en jpg avec une qualité de 80% . Le fichier est ensuite stocké sur le disque public . Notez que vous devez fournir un nom de fichier, pas seulement le répertoire.
Assurez-vous d’ajouter use Illuminate\Http\File;
en haut de votre fichier pour que cela fonctionne, et parcourez la section documentation diffusion automatique en continu .
Cela suppose que vous voulez tous les jpegs
$path = $request->file('createcommunityavatar');
$resize = Image::make($path)->fit(300)->encode('jpg');
$filePath = $resize->getRealPath() . '.jpg';
$resize->save($filePath);
$store = Storage::putFile('public/image', new File($resize));
$url = Storage::url($store);
Voici comment je le fais dans mon application avec des commentaires pour aider
// Get the file from the request
$requestImage = request()->file('image');
// Get the filepath of the request file (.tmp) and append .jpg
$requestImagePath = $requestImage->getRealPath() . '.jpg';
// Modify the image using intervention
$interventionImage = Image::make($requestImage)->resize(125, 125)->encode('jpg');
// Save the intervention image over the request image
$interventionImage->save($requestImagePath);
// Send the image to file storage
$url = Storage::putFileAs('photos', new File($requestImagePath), 'thumbnail.jpg');
return response()->json(['url' => $url]);
Je l'ai fait de la manière suivante, c'est simple et sans confusion de chemin:
//Get file
$path= $request->file('createcommunityavatar');
// Resize and encode to required type
$img = Image::make($file)->fit(300)->encode('jpg');
//Provide own name
$name = time() . '.jpg';
//Put file with own name
Storage::put($name, $img);
//Move file to your location
Storage::move($name, 'public/image/' . $name);
Vous ne pouvez pas stocker un objet\Intervention\Image\Image directement avec le système de fichiers Laravel 5. Ce que vous pouvez faire, c'est redimensionner l'image à partir de votre demande et la sauvegarder sous le même chemin tmp. Ensuite, stockez simplement le fichier téléchargé (écrasé) dans le système de fichiers.
Code:
$image = $request->file('createcommunityavatar');
//resize and save under same tmp path
$resize = Image::make($image)->fit(300)->save();
// store in the filesystem with a generated filename
$store = $image->store('image', 'public');
// get url from storage
$url = Storage::url($store);
Essayez de mettre à jour l'extension Gd pour la version actuelle de PHP.
Si cela ne vous aide pas, essayez d'enregistrer l'image redimensionnée sur un disque local et utilisez Storage :: putFile.
Vous pouvez supprimer le fichier une fois qu’il a été téléchargé sur votre chemin de stockage.
Le second paramètre de votre méthode putFile est une instance de la classe Image Intervention. Vous devez le transmettre comme second paramètre à la méthode putFile.
$resize->save($absolutePath . 'small/' . $imageName);