Comment est-ce que je devrais recadrer l'image du côté du client en utilisant jcrop et le télécharger?

Ce que je suis en train de faire est de sélectionner l'image à l'aide de html contrôle fileupload, la récolte de la sélection à l'aide de jcrop, rogner l'image à côté client et charger l'image. Voici le violon lien https://jsfiddle.net/govi20/spmc7ymp/

Du code utilisé dans le code:

cible pour jcrop image
photographie contrôle fileupload
aperçu toile aperçu
clear_selection le bouton effacer la zone sélectionnée

de la configuration de l'jcrop.

<script type="text/javascript">
jQuery(function($){

var api;

$('#target').Jcrop({
  //start off with jcrop-light class
  bgOpacity: 0.5,
  keySupport: false,
  bgColor: 'black',
  minSize:[240,320],
  maxSize:[480,640],
  onChange : updatePreview,
  onSelect : updatePreview, 
  height:160,
  width:120,
  addClass: 'jcrop-normal'
},function(){
  api = this;
  api.setSelect([0,0,240,320]);
  api.setOptions({ bgFade: true });
  api.ui.selection.addClass('jcrop-selection');
  });

});

pour la compensation de la sélection.

 jQuery('#clear_selection').click(function(){
  $('#target').Jcrop({    

      setSelect: [0,0,0,0],
    });
});

pour afficher le fichier téléchargé dans jcrop

function readURL(input) {

    if (input.files && input.files[0]) {
        var reader = new FileReader();
        reader.onload = function (e) {
            $('#target').attr('src', e.target.result);
            setProperties();       
        }
        reader.readAsDataURL(input.files[0]);
    }
}

 function setProperties(){
   $('#target').Jcrop({         
              setSelect: [0,0,240,320]
        }); 
 }
 $("#photograph").change(function(){
    readURL(this);     
  });

pour recadrer l'image et de l'attribuer à la toile(got ce à partir de l'un des threads sur stackoverflow)

function make_base() {
    console.log("make_base called");
    var base_image = new Image();
    base_image.src = '';
    base_image.onload = function () {
        context.drawImage(base_image, 0, 0);
    }
}

var canvas = document.getElementById('preview'),
context = canvas.getContext('2d');

make_base();
function updatePreview(c) {
    console.log("called");
    if(parseInt(c.w) > 0) {
        //Show image preview
        var imageObj = $("#target")[0];
        var canvas = $("#preview")[0];
        var context = canvas.getContext("2d");
        context.drawImage(imageObj, c.x, c.y, c.w, c.h, 0, 0, canvas.width, canvas.height);
    }
};

Questions, je suis confronté:

  1. updatePreview fonction n'est pas appelée sur la sélection, donc pas de toile est visible.
  2. sélection de la récolte n'est pas déplaçable (je suis en utilisant bootstrap css).
  3. Toile est l'élément HTML5, cela signifie que le client devrait html5 compatible navigateur, alors comment puis-je supprimer cette condition.

source d'informationauteur Pablo Escobar