2017-10-19 5 views
0

Je reçois cette erreur lorsque j'essaie de récupérer une image de la base de données, tout ce que je voulais faire est d'imprimer l'image de la signature à mon avis, peut quelqu'un vous aide? J'ai entendu que le fichier pourrait être corrompu ou quelque chose ou encore il ne pouvait pas décoder base64 mais je vois qu'ils utilisent encoder dessus? (assez confus sur ce qu'il faut faire) Merci d'avanceErreur: imagecreatefromstring(): Les données ne sont pas dans un format reconnu laravel

J'ai enregistré mon image dans la base de données par l'intermédiaire de l'entrée de l'utilisateur et le mettre dans la base de données au format binaire. (Table- $> binaire ('signature');)

Contrôleur

public function getInfo($id) { 

     $data = personal_info::where('id',$id)->get(); 

     $imageDataEncoded = DB::table('personal_infos')->select('signature')->get(); //get image 
    $imageData = base64_decode($imageDataEncoded); 
    $source = imagecreatefromstring($imageData); 
    $imageSave = imagejpeg($source); 
    imagedestroy($source); 
    return view('test',compact('data','imageSave')); 
} 

view.blade.php

@foreach ($data as $object) 
<b>Signature: </b>{{$object->$imageSave}}<br><br> 

Si je retire toute cette partie au contrôleur et juste utilisé ce Dans le view.blade.php, je ne vais pas avoir d'erreur mais je sais que c'est faux car je suis supposé le convertir en une image que j'ai faite. J'ai vu d'autres forums que j'avais besoin du chemin de l'image mais que mon image est stockée dans la base de données, alors que dois-je faire?

Controller (si remove)

$imageDataEncoded = DB::table('personal_infos')->select('signature')->get(); //get image 
     $imageData = base64_decode($imageDataEncoded); 
     $source = imagecreatefromstring($imageData); 
     $imageSave = imagejpeg($source); 
     imagedestroy($source); 

view.blade.php

@foreach ($data as $object) 
<b>Signature: </b>{{base64_decode($object->$imageSave)}}<br><br> 

Obtenir l'image de la signature de l'utilisateur en utilisant ceci: page1.blade.php

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title>Signature Pad</title> 
</head> 
<body> 

{!! Form::open(['url' => 'page1/submit']) !!} 

<canvas id="signature-canvas" style="width:500px;height:200px;max-width:100%;border:1px #CCC solid;"></canvas> 

<div id="signature-message"></div> 

<div id="signature-buttons"> 
    <input type="button" id="clear-signature-btn" value="Clear"> 
    <input type="button" id="save-signature-btn" value="Save"> 
</div> 

<input type="hidden" name="signature" id="signature-data" value=""> 

SignatureController

public function submit(Request $request) 
{ 

    $data = array(); 
    $data['signature'] = $request->signature; 

Obtenir maintenant: (pourquoi je reçois ce?) enter image description here

+0

Copie possible de [imagecreatefromstring(): Les données ne sont pas dans un format reconnu dans] (https: // stackoverflow.com/questions/42228473/imagecreatefrom-data-is-not-in-a-reconnu-format-in) –

+0

Il est en quelque sorte similaire mais j'avais essayé de le réparer en utilisant la réponse fournie. J'ai mis à jour mes questions pourriez-vous m'aider à jeter un coup d'oeil? @peterHaberkorn – blastme

+0

montre le code source de l'élément rendu en frontend et quel est le format de base que l'utilisateur a uploadé –

Répondre

0
  1. foreach dans la vue n'est pas nessesary si vous utilisez:

    $data = personal_info::find($id);

au lieu de

$data = personal_info::where('id',$id)->get(); 

l'exemple suivant shoulld travail

vous ne avez pas besoin le chemin que vous pouvez utiliser la chaîne de base_64 s'il ist droit formated

<img width="16" height="16" src="data:image/gif;base64,R0lGODdhEAAQAMwAAPj7+FmhUYjNfGuxYY 
DJdYTIeanOpT+DOTuANXi/bGOrWj6CONzv2sPjv2CmV1unU4zPgISg6DJnJ3ImTh8Mtbs00aNP1CZSGy0YqLEn47RgXW8amasW 
7XWsmmvX2iuXiwAAAAAEAAQAAAFVyAgjmRpnihqGCkpDQPbGkNUOFk6DZqgHCNGg2T4QAQBoIiRSAwBE4VA4FACKgkB5NGReAS 
FZEmxsQ0whPDi9BiACYQAInXhwOUtgCUQoORFCGt/g4QAIQA7"> 

le premier « data:image/gif;base64, » est peut-être nessesary mais peut-être pas

essayez ceci:

Signature: <img width="16" height="16" src="{{base64_encode($data->signature)}}"> 

éditer: vous devriez vraiment sauver e fichiers sur le disque et non dans la base de données

+0

merci pour votre réponse, en demandant simplement ces mots "R0lGODdhEAAQAMwAAPj7 + FmhUYjNfGuxYY ..." sont-ils tous les base64 de la images? Et où puis-je le mettre ou est en fait la signature "Signature: "? Désolé pour la question stupide, je viens de commencer cette nouvelle partie et est incertain de beaucoup de choses – blastme

+0

Et une autre question pourquoi est-ce base64_encode et ne pas décoder? Je suis assez confus avec cette partie – blastme

+0

décode rend au binaire –