2016-06-17 2 views
2

からイメージファイルを作成します。Laravel 5.2:どのように私はこのような形式のデータから受け取る私のコントローラでは、JSON

"output":{"width":500,"height":500,"image":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQFAH/9k=..."},"actions":{"crop":{"x":97,"y":0,"height":500,"width":500},"size":null}}[ 

私は、このデータからイメージファイルを作成できますか?

upd 1.json - okをデコードしてイメージデータを取り出します - OK、base64 - okをデコードしますが、ディスクに書き込むとエラーが発生します:Decoder.php行のNotReadableException 96:Unable to与えられたバイナリデータからのinit。

$file = Request::input('photo'); 
$imagedata=json_decode($file); 
$file=$imagedata->output->image; 
$image = base64_decode($file); 

$png_url = "user-".time().".png"; 
$path = "/public/".$png_url; 

Image::make($image)->save($path); 

UPD 2. ますfile_put_contents関数で解決しました。ここ

+2

、JSONをデコードした画像データを引き出し、BASE64のデコードに書き込みますディスク。 –

+0

Marcさん、ありがとうございます。image :: makeを作成しようとするとエラーが発生します。最初の投稿が更新されました。 – Alex

答えて

1

これは働いている:

$file = Request::input('photo'); 
$imagedata=json_decode($file); 
$file=$imagedata->output->image; 
$png_url = "user-".time().".png"; 
$path = "uploads/".$png_url; 
$image = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $file)); 
file_put_contents($path, $image); 
2

あなたはJSONデータから画像を保存することができます方法です。

$data = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl' 
    . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr' 
    . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r' 
    . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg=='; 
$data = base64_decode($data); 

$im = imagecreatefromstring($data); 
if ($im !== false) { 
    echo imagejpeg($im , base_path() . DIRECTORY_SEPARATOR . "sth.jpeg") ; 
} 
else { 
    echo 'An error occurred.'; 
} 
+0

Salarさん、ありがとうございますが、エラーが発生します:imagecreatefromstring():データが認識された形式ではありません。 – Alex

+0

base64は、すでにjpegイメージです。デコード/保存するだけです。それをGDで実行し、jpegに再圧縮すると画質がゴミ箱に捨てられます。 –

+0

@Alexその後画像のエンコードに問題があります。サンプル画像を取ってオンラインツールでエンコードし、クライアントから送信されたデータと比較して問題がないことを確認してください。 – Salar

関連する問題