错误:imagecreatefromstring():数据不是可识别格式的laravel

时间:2017-10-19 00:57:42

标签: php laravel laravel-5.3

当我尝试从数据库中检索图像时出现此错误,我想要做的只是在我的视图中打印出签名图像,任何人都可以帮忙吗?我听说文件可能已损坏或某些东西或它也无法解码base64但我看到它们使用编码吗? (对于该怎么做很困惑)提前致谢

我通过用户输入将我的图像保存到数据库中,并以二进制格式将其放入数据库中。 ($ table-> binary('signature');)

控制器

   --ignored
       Show ignored files as well.

view.blade.php

    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>

view.blade.php

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

使用此方式从用户获取签名图像: page1.blade.php

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

SignatureController

<!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="">

立即获取此信息:(为什么我会这样做?) enter image description here

1 个答案:

答案 0 :(得分:0)

  1. 如果您使用以下内容,则视图中的foreach不是必需的:

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

  2. 而不是

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

    以下示例承担工作

    你不需要你可以使用base_64字符串的路径,如果他正确格式化

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

    第一个&#34; data:image/gif;base64,&#34;可能是nessesary但可能不是

    试试这个:

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

    编辑:您应该将文件保存在磁盘上而不是数据库中