jcrop 保存之前的图片

Jcrop saves previous image

我有一个正在裁剪的预览,以及一个显示被裁剪部分的缩略图。每当我选择一个新图像时,预览都不会更新,而是保留以前使用的图像。但是,缩略图确实得到了更新,因为它显示了新图像。这是我的代码...

function readURL(input) {
    if (input.files && input.files[0]) {
        var reader = new FileReader();

        reader.onload = function (e) {
            $('#previewSub2').attr('src', e.target.result);
            $('#previewSub').attr('src', e.target.result);
            ...
            var imgwidth = $("#previewSub2").width();
            var imgheight = $("#previewSub2").height();
            $("#previewSub").Jcrop({
                onChange: showPreview,
                onSelect: showPreview,
                aspectRatio: 1,        
                setSelect: [0,imgwidth,0,0],
                minSize: [90,90],
                addClass: 'jcrop-light' 
             });
             ...

previewSub2 是缩略图,previewSub 是我要更新的 JCrop 图片。出于某种原因,以下代码未对其进行更新:

 $('#previewSub').attr('src', e.target.result);

这是我的 showPreview 的其余代码:

function showPreview(coords)
{
var imgSize = $("#previewSub").height();
var imgWidth =  $("#previewSub").width();

var rx = 150 / coords.w;
var ry = 150 / coords.h;

$('#x').val();
$('#y').val();
$('#w').val();
$('#h').val();

$('#previewSub2').css({
    width: Math.round(rx * imgWidth) + 'px',
    height: Math.round(ry * imgSize) + 'px',
    marginLeft: '-' + Math.round(rx * coords.x) + 'px',
    marginTop: '-' + Math.round(ry * coords.y) + 'px'
});
}

有人可以向我解释更新 previewSub 需要做什么吗?

您可以像这样重新加载 jcrop 组件

var jcrop_api = null;
function readURL(input) {
    if (input.files && input.files[0]) {
       var reader = new FileReader();

    reader.onload = function (e) {
        if( jcrop_api ) {
             jcrop_api.destroy();
        }

        $('#previewSub2').attr('src', e.target.result);
        $('#previewSub').attr('src', e.target.result);
        ...
        var imgwidth = $("#previewSub2").width();
        var imgheight = $("#previewSub2").height();

        jcrop_api = $("#previewSub").Jcrop({
            onChange: showPreview,
            onSelect: showPreview,
            aspectRatio: 1,        
            setSelect: [0,imgwidth,0,0],
            minSize: [90,90],
            addClass: 'jcrop-light' 
         });

更新:如果您使用的是最新版本的 jcrop,您应该这样设置 api:

$("#previewSub").Jcrop({
    onChange: showPreview,
    onSelect: showPreview,
    aspectRatio: 1,        
    setSelect: [0,imgwidth,0,0],
    minSize: [90,90],
    addClass: 'jcrop-light' 
    }, function() {
        jcrop_api = this;
});