2016-03-28 16 views
1

Phonegap başarı söylüyor, Laravel bana başarılar söylüyor ama her zaman beyaz.PhoneGap to Laravel resim yükleniyor boş/beyaz

PhoneGap (Android) js iki İlgili kod blokları şunlardır:

function sendImage(src) { 


window.localStorage.setItem('csrf', csrf); 

src = (src == 'library') ? Camera.PictureSourceType.PHOTOLIBRARY : Camera.PictureSourceType.CAMERA; 
navigator.camera.getPicture(success, fail, {quality: 45, sourceType: src}); 

function success(imageData) { 


    imageData = getBase64Image(imageData); 
    userId = window.localStorage.getItem("user_id"); 


    var url = 'https://example.com/profile/update/picture'; 
    var params = {photo: 'image/png;space,' + imageData, user_id: userId}; 

    //csrf = window.localStorage.getItem("csrf"); 


    $.ajax({ 
     url: url, 
     type: 'POST', 
     dataType: 'json', 
     data: params, 
     headers: {"x-csrf-token": 'notoken'}, 
     async: false, 
     success: function(res) 
     { 
      if(res.success) 
      { 
       alert("Success!"); 
      } 

     }, 
     complete: function(res) 
     { 
     }, 
     error: function(res) 
     { 
      alert("Error = " + JSON.stringify(res)); 
     } 
    }); 

} 

function fail(error){ 
    alert('You are FAIL'); 
} 

function getBase64Image(img) { 

    // Create an empty canvas element 
    var canvas = document.createElement("canvas"); 

    // Copy the image contents to the canvas 
    var ctx = canvas.getContext("2d"); 

    //use this block to not draw image unless image is loaded 
    var callback = function(image) { 
     if(!image) image = this; 
     canvas.width = img.width; 
     canvas.height = img.height; 
     ctx.drawImage(image, 0, 0); 
    } 

    //check if image is loaded 
    if(img.complete) { 
     callback(img); 
    }else { 
     img.onload = callback; 
    } 

    //get the data-URL formatted image 
    var dataURL = canvas.toDataURL("image/png"); 

    return dataURL.replace(/^data:image\/(png|jpg);base64,/, ""); 
} 

}

laravel olarak fotoğraf boş veya boş için güncelliyor. Eğer görüntü tamamen yüklenen önce çizim fonksiyonu denir anlamına boş veya şeffaf görüntü elde ederse

public static function check_base64_image($base64) { 
    $img = imagecreatefromstring(base64_decode($base64)); 
    if (!$img) { 
     return false; 
    } 

    imagepng($img, 'tmp.png'); 
    $info = getimagesize('tmp.png'); 

    unlink('tmp.png'); 

    if ($info[0] > 0 && $info[1] > 0 && $info['mime']) { 
     return true; 
    } 

    return false; 
} 

cevap

0

: Bir noktada en az o görüntü okunaklı olduğunu düşündüğü laravel çok doğru dönüyordu orada bu kod bloğunu var . Javascript asenkron çalışır. Kodunuzda, geri arama() işleviniz yürütülmeden önce yürütülen iki satırın altında.

var dataURL = canvas.toDataURL("image/png"); 
return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");