Мне нужно выполнить обрезку на стороне клиента.
Для этого я использую jcrop.
Теперь, так как моя поверхность обрезки должна соответствовать модальному режиму, я сделал следующее: (читайте ниже или код напрямую)
При изменении ввода я уничтожаю любой элемент jcrop и удаляю все теги css из моего изображения, кроме max- "width: 100 % ", чтобы изображение не переполнялось.
Тогда файл из входных данных присваивается в теге изображения. После этого отображается модальное значение, так что я могу получить ширину и высоту элемента изображения правильного размера.
Затем я назначаю эти размеры параметрам jcrop boxWidth и boxHeight и прикрепляю их к изображению, чтобы Элемент jcrop также не переполняется. Мне пришлось поместить код вокруг него внутри функции fileReader.onload, чтобы он принимал размеры только после изменения источника изображения.
$(document).on('change', '#upload', function (evt) {
var tgt = evt.target || window.event.srcElement,
files = tgt.files;
$('.jcrop-holder').remove();
$('#studentPhoto').css("width", "");
$('#studentPhoto').css("height", "");
$('#studentPhoto').css("visibility", "");
$('#studentPhoto').css("display", "");
// FileReader support
if (FileReader && files && files.length) {
var fr = new FileReader();
var w;
var h;
fr.onload = function () {
$('#studentPhoto').attr('src', fr.result)
$('#imgMOD').show('fast', '', function () {
w = $('#studentPhoto').width();
h = $('#studentPhoto').height();
$('#studentPhoto').Jcrop({
onSelect: showCoords,
aspectRatio: 667 / 500,
boxWidth: w,
boxHeight: h
});
});
}
fr.readAsDataURL(files[0]);
}
function showCoords(c) {
$('#x').text(c.x);
$('#y').text(c.y);
$('#x2').text(c.x2);
$('#y2').text(c.y2);
$('#w').text(c.w);
$('#h').text(c.h);
};
});
Проблема в том, что, хотя отладчик показывает, что. Часть jcrop достигнута, она не создаст элемент jcrop после второго изменения. Первый раз работает отлично.