Я пытаюсь выбрать изображение с помощью элемента управления загрузкой HTML файла, затем отрендерить изображение и обрезать его с помощью jcrop https://jsfiddle.net/govi20/spmc7ymp/
Идентификатор, использованный в коде:
target jcrop image target
фотография контроль загрузки файла 
Предварительный просмотр Предварительный просмотр холста
кнопка clear_selection очистить выделенную область
<script src="./js/jquery.min.js"></script>
<script src="./js/jquery.Jcrop.js"></script>
<script src="./js/jquery.color.js"></script>
настройка 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');
  });
});
для очистки выбора.
jQuery('#clear_selection').click(function(){
  $('#target').Jcrop({    
      setSelect: [0,0,0,0],
    });
});
для отображения загруженного изображения на панели 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);     
});
Я использую следующий код для обрезки и рендеринга изображения на холсте.
    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);
        }
    };
Список проблем, с которыми я здесь сталкиваюсь:
- Функция updatePreview не вызывается при выделении, поэтому холст не виден.
 - Поле выбора обрезки не перетаскивается (я использую загрузочный CSS, я подозреваю проблемы с зависимостями).
 - Canvas - это элемент 
HTML5, это означает, что у конечного пользователя должен быть браузер, совместимый сHTML5, я работаю над приложением, которое имеет миллионы пользователей. Принуждение пользователей к использованию новейшего браузера не является решением. Так какой же должен быть запасной механизм?