2017-02-21 10 views
2

Я пытаюсь обрезать большое изображение с помощью Jcrop, задав его атрибуты высоты и ширины customized. Я пробовал много вариантов в Jcrop, но ничего не работает. Вот мой код:Как обрезать большое изображение с помощью Jcrop, изменив его размер?

HTML:

<input type="file" id="FileUpload1" accept=".jpg,.png,.gif" /> 
<br /> 
<br /> 
<table border="0" cellpadding="0" cellspacing="5"> 
    <tr> 
     <td> 
      <img id="Image1" src="" alt="" style="display: none; height:600px; width:600px;" /> 
     </td> 
     <td> 
      <canvas id="canvas" height="5" width="5"></canvas> 
     </td> 
    </tr> 
</table> 
<br /> 
<input type="button" id="btnCrop" value="Crop" style="display: none" /> 
<input type="hidden" name="imgX1" id="imgX1" /> 
<input type="hidden" name="imgY1" id="imgY1" /> 
<input type="hidden" name="imgWidth" id="imgWidth" /> 
<input type="hidden" name="imgHeight" id="imgHeight" /> 
<input type="hidden" name="imgCropped" id="imgCropped" /> 

Jquery:

$(document).delegate('#cover-image','change', function(e){ 
     var reader = new FileReader(); 
     reader.onload = function (e) { 
      $('#Image1').show(); 
      $('#Image1').attr("src", e.target.result); 
      $('#Image1').Jcrop({ 
       setSelect: [ 0,0,600,180 ], 
       aspectRatio: 10/3, 
       boxWidth: 600, 
       boxHeight: 600, 
       trueSize: [600, 600], 
       onChange: SetCoordinates, 
       onSelect: SetCoordinates 
      }); 
     } 

     reader.readAsDataURL($(this)[0].files[0]);  
    }); 

    $('#btnCrop').click(function() { 
     var x1 = $('#imgX1').val(); 
     var y1 = $('#imgY1').val(); 
     var width = $('#imgWidth').val(); 
     var height = $('#imgHeight').val(); 
     var canvas = $("#canvas")[0]; 
     var context = canvas.getContext('2d'); 
     var img = new Image(); 
     img.onload = function() { 
      canvas.height = 180; 
      canvas.width = 600; 
      context.drawImage(img, x1, y1, width, height, 0, 0, canvas.width, canvas.height); 
      $('#imgCropped').val(canvas.toDataURL()); 
      $('#btnCrop').hide(); 
     }; 
     img.src = $('#Image1').attr("src"); 
    }); 
}); 

function SetCoordinates(c) { 
    $('#imgX1').val(c.x); 
    $('#imgY1').val(c.y); 
    $('#imgWidth').val(c.w); 
    $('#imgHeight').val(c.h); 
    $('#btnCrop').show(); 
    $('#save-cropped-image, #delete-image').hide(); 
}; 

Я пытаюсь обрезать большую подгонку изображения в DIV, который короче, чем изображение, поэтому изображение архивируется в этом. Но когда я обрезаю этот образ, он не возвращает мне правильные координаты, и правильное изображение не создается на холсте.

Я отключаюсь от 4 часов. Любая помощь будет оценена. Спасибо!

+0

Пожалуйста, проверьте http://deepliquid.com/content/Jcrop_Manual.html –

+0

Я уже вижу эту документацию. Но не найдено идеального решения. –

ответ

1

Используйте этот код. Получите оригинальный размер изображения, а затем обрезайте.

$(document).delegate('#cover-image','change', function(e){ 
      var reader = new FileReader(); 
      reader.onload = function (e) { 
       $('#Image1').attr("src", e.target.result); 
       var $img = $("#Image1"); 
       $img.hide().removeClass("image12"); 
       var w = $img.width(); 
       var h = $img.height(); 
       $('#Image1').Jcrop({ 
        trueSize: [w, h], 
        onChange: SetCoordinates, 
        onSelect: SetCoordinates 
       }); 
      } 

      reader.readAsDataURL($(this)[0].files[0]);  
     }); 

<style type="text/css"> 
.image12{ 
    height:600px; 
    width:600px; 
} 
</style> 

<img id="Image1" class="image12" src="" alt="" style="display: none; " /> 
+0

Спасибо! Харлин: -) ... Это сработало очень хорошо. –