Jquery Crop:裁剪器图像未更改

3

我有以下代码:

<link rel="stylesheet" href="style.css">
<script src="/static/js/jquery/2.1.4/jquery.min.js"></script>
<script src="http://fengyuanchen.github.io/cropper/js/cropper.min.js"></script>
<form  action="" method="post" enctype="multipart/form-data">
<img id="crop" style="width:400px;height:200px;" />
<div id="img2" style="position: relative; overflow: hidden; border: 1px solid #000; background: #fff; width: 100px; height: 100px;"></div>
X: <input type="text" id="crop_x" name="crop_x" /><br />
Y: <input type="text" id="crop_y" name="crop_y" /><br />
Width: <input type="text" id="crop_width" name="crop_width" /><br />
Height: <input type="text" id="crop_height" name="crop_height" /><br />
<input type="file" id="file" name="file" />
<input type="submit" id="submit" name="submit" value="Submit" />
</form>
<script>

var url = null;
$('#file').on('change',function(){

    var file = this.files[0];

    if(url != null){

        URL.revokeObjectURL(url);

    }

    url = URL.createObjectURL(file);


    startCropper();

});


function startCropper(){

    $('#crop').removeAttr('src');

    $('#crop').attr('src',url);

    $('#crop').cropper({

    viewMode            : 0,

    cropBoxResizable    : false,

    minCropBoxWidth     : 100,

    minCropBoxHeight    : 100,

    dragMode            : 'none',

    preview             : $('#img2'),

    aspectRatio: 1,

    crop : function(e){

        $('#crop_x').val(e.x);

        $('#crop_y').val(e.y);

    }

 });
};
</script>

问题在于当我选择一个文件后,新的图像没有显示(裁剪器仍然显示旧图像)。
您可以看到,我检查了旧的url并进行了撤销。当我在startCropper()函数中不使用$("#crop").cropper({...})时,它可以工作。
GitHub: https://github.com/fengyuanchen/cropper/tree/v2.3.0 我如何强制裁剪器加载新图像?
3个回答

6
你需要调用
$('#crop').cropper('destroy');

初始化裁剪之前


2
这段代码可以解决Cropper中图片不改变的问题。 HTML
<input id="userImage" type="file" name="userImage" accept="image/*">

<div>
   <canvas id="canvas" style="display: none;">
      Your browser does not support the HTML5 canvas element.
   </canvas>
</div>
<div id="imagePreview" style="position: relative; overflow: hidden; border: 1px solid #000; background: #fff; width: 100px; height: 100px;"></div>

CSS

img {max-width: 100%;} /* This rule is very important, please do not ignore this! */

#canvas {
  height: auto;
  width: 250px; /*Change this value according to your need*/
  background-color: #ffffff;
  cursor: default;
  border: 1px solid #000;
}

JS

var canvas  = $("#canvas");
context = canvas.get(0).getContext("2d");

$('#userImage').on( 'change', function(){
if (this.files && this.files[0]) {
   if ( this.files[0].type.match(/^image\//) ) {
      var reader = new FileReader();
      reader.onload = function(evt) {
      var img = new Image();
      img.onload = function() {
         context.canvas.height = img.height;
         context.canvas.width  = img.width;
         context.drawImage(img, 0, 0);

         // Destroy the old cropper instance
         canvas.cropper('destroy');

         // Replace url
         canvas.attr('src', this.result);

         var cropper = canvas.cropper({
            //these options can be changed or modified according to need
            viewMode: 0,
            cropBoxResizable: false,
            minCropBoxWidth: 100,
            minCropBoxHeight: 100,
            dragMode: 'none',
            preview: $('#imagePreview'),
            aspectRatio: 1,
            crop : function(e){
               $('#crop_x').val(e.x);
               $('#crop_y').val(e.y);
            }
         });
       };
       img.src = evt.target.result;
    };
    reader.readAsDataURL(this.files[0]);
  } else {
    alert("Invalid file type! Please select an image file.");
  }
} else {
  alert('No file(s) selected.');
}
});

欲了解更多细节并更好地理解,请访问

Cropper 官方文档


1
帮了很大的忙,我真的很讨厌这个插件。 - Ramon Carvalho

1
在 cropper JS 1.3.3 中,绘制画布后使用 cropper.destroy(); 而不是 canvas.cropper('destroy')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接