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
11
demandé sur HiDeo 2016-08-12 20:55:02

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());
11
répondu borfast 2016-10-04 15:02:36

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.

2
répondu Tarunn 2016-10-10 14:46:16

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());
0
répondu shock_gone_wild 2016-10-11 06:28:37

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);
0
répondu abdalla arbab 2017-08-19 06:13:24