Error sending and saving AJAX and PHP image

1

In the script I have the camera on and then The Code that the image takes on a canvas. I see that it returns a base64 I remove ( data:image/jpeg;base64, ) that brings the text.

I'm trying:

  • Convert base64 into a file type image
  • Save the image on the server
  • And that in the variable that I have, the route is saved.
  • The code I have is the following to see what I'm doing wrong:

    JavaScript

    window.addEventListener('load');
    
    
    
    function encender() {
      //declara variables
      var button = this;
      button.innerHTML = 'Tomar Foto';
      var video = document.querySelector('#video'),
        canvas = document.querySelector('#canvas'),
        btn = document.querySelector('#camara'),
        img = document.querySelector('#imagen');
    
      //acceso a la camara
      navigator.getUserMedia = (
        navigator.getUserMedia ||
        navigator.webkitGetUserMedia ||
        navigator.mozGetUserMedia ||
        navigator.msGetUserMedia
      );
    
      //validar que encontro
      if (navigator.getUserMedia) {
        //reproduce el video
        navigator.getUserMedia({
          video: true
        }, function(stream) {
          video.src = window.URL.createObjectURL(stream); //lee la camara
          video.play(); //reproduce el video
        }, function(e) {
          console.log(e);
        })
    
      } else {
        alert('No se acepta el video en tu navegador');
      }
    
      video.addEventListener('loadedmetadata', function() {
        canvas.width = video.videoWidth;
        canvas.height = video.videoHeight;
      }, false);
    
      btn.addEventListener('click', function(e) {
        e.preventDefault();
        canvas.getContext('2d').drawImage(video, 0, 0);
        var imgData = canvas.toDataURL('image/jpeg');
        var imagenData = canvas.toDataURL('image/jpeg');
        var imagenData = imagenData.replace(/^data:image\/jpeg;base64,/, "+"); //Quito data:image/jpeg;base64 para convertir imagen
    
        $.ajax({
          url: 'saveFile.php',
          data: {
            imagenData: imagenData
          },
          method: 'post',
          success: function(data) {
            alert("Imagen guardada en servidor");
          }
    
        });
    
        $("#operation-driver_identification_file").val(imagenData);
        img.setAttribute('src', imgData);
    
    
    
      });
    
    }
    

    PHP:

    <?php $this->registerJsFile("@web/js/camara.js");
    ?><?=$form->field($model, 'driver_identification_file')->textInput(['disabled'=> true]);
    ?><?php
    /* saveFile.php */
    
    //Obtener variable POST e desemcriptarla
    $img=$_POST['imagenData'];
    //$img = str_replace('data:image/png;base64,', '', $img); //este cambio en el JS
    //$img = str_replace(' ', '+', $img);
    $data=base64_decode($img);
    $im=imagecreatefromstring($data); //convertir text a imagen
    if ($im !==false) {
      imagejpeg($im, 'capture/'); //guardar a server 
      imagedestroy($im); //liberar memoria  
      echo 'Todo salio bien tu imagen ha sido guardada';
    }
    
    else {
      echo 'Un error ocurrio al convertir la imagen.';
    }
    

    HTML:

    <video id="video"></video>
    <canvas id="canvas"></canvas><br>
    
    <input type="button" value="Encender" onclick="encender()" />
    <button id="camara">Take photo</button>
    
        
    asked by Héctor Ramírez 14.12.2017 в 19:44
    source

    0 answers