Código de: publico/js/jCrop.js
var crop_max_width = 800;
var crop_max_height = 600;
var jcrop_api;
var canvas;
var context;
var image;
var prefsize;
$("#file-crop").change(function() {
loadImage(this);
});
// Inicializa quando carrega
$("#view-crop").change(function() { applyCrop(); })
function loadImage(input) {
// LIMITA TAMANHO DO UPLOAD
if (input.files[0].size > 3100000) {
$toast = toastr['error']('Ela supera o limite máximo <b>(3mb)</b>. Escolha uma nova imagem para continuar', 'Esta Imagem é muito Grande!');
return false;
} else {
valor = $(input).val();
if(valor.length) {
$('#view-crop').show();
$('#capa').addClass('hidden');
$('#label-crop').hide()
$('#submit-crop').removeClass('hidden').attr('disabled', true).html('<i class="fa fa-spinner fa-pulse"></i> Carregando');
setTimeout(function(){
$('#submit-crop').removeAttr('disabled').html('<i class="fa fa-save"></i> Salvar');
}, 1500);
} else {
if($('#capa').attr('src').length > 2) { $('#capa').removeClass('hidden') }
$('#submit-crop').addClass('hidden');
$('#label-crop').show()
}
}
if (input.files && input.files[0]) {
var reader = new FileReader();
canvas = null;
reader.onload = function(e) {
image = new Image();
image.onload = validateImage;
image.src = e.target.result;
}
reader.readAsDataURL(input.files[0]);
}
}
function dataURLtoBlob(dataURL) {
var BASE64_MARKER = ';base64,';
if (dataURL.indexOf(BASE64_MARKER) == -1) {
var parts = dataURL.split(',');
var contentType = parts[0].split(':')[1];
var raw = decodeURIComponent(parts[1]);
return new Blob([raw], {
type: contentType
});
}
var parts = dataURL.split(BASE64_MARKER);
var contentType = parts[0].split(':')[1];
var raw = window.atob(parts[1]);
var rawLength = raw.length;
var uInt8Array = new Uint8Array(rawLength);
for (var i = 0; i < rawLength; ++i) {
uInt8Array[i] = raw.charCodeAt(i);
}
return new Blob([uInt8Array], {
type: contentType
});
}
function validateImage() {
if (canvas != null) {
image = new Image();
image.onload = restartJcrop;
image.src = canvas.toDataURL('image/png');
} else restartJcrop();
}
function restartJcrop() {
if (jcrop_api != null) {
jcrop_api.destroy();
}
$("#view-crop").empty();
$("#view-crop").append("<canvas id=\"canvas\">");
canvas = $("#canvas")[0];
context = canvas.getContext("2d");
canvas.width = image.width;
canvas.height = image.height;
context.drawImage(image, 0, 0);
$("#canvas").Jcrop({
onSelect: selectcanvas,
onChange: selectcanvas,
onRelease: clearcanvas,
boxWidth: crop_max_width,
boxHeight: crop_max_height,
//aspectRatio: 100/50,
setSelect: [0, 0, 10000, 5000],
}, function() {
jcrop_api = this;
});
clearcanvas();
}
function clearcanvas() {
prefsize = {
x: 0,
y: 0,
w: canvas.width,
h: canvas.height,
};
}
function selectcanvas(coords) {
prefsize = {
x: Math.round(coords.x),
y: Math.round(coords.y),
w: Math.round(coords.w),
h: Math.round(coords.h)
};
$('#crop-x').attr('value', prefsize.x);
$('#crop-y').attr('value', prefsize.y);
$('#crop-w').attr('value', prefsize.w);
$('#crop-h').attr('value', prefsize.h);
}
function applyCrop() {
canvas.width = prefsize.w;
canvas.height = prefsize.h;
context.drawImage(image, prefsize.x, prefsize.y, prefsize.w, prefsize.h, 0, 0, canvas.width, canvas.height);
validateImage();
}
$("#form-crop").submit(function(e) {
e.preventDefault();
formData = new FormData($(this)[0]);
var blob = dataURLtoBlob(canvas.toDataURL('image/png'));
//---Add file blob to the form data
formData.append("cropped_image", blob);
$.ajax({
url: $(this).attr('action'),
type: "POST",
data: formData,
dataType: "json",
contentType: false,
cache: false,
processData: false,
beforeSend: function (){
BlockUI('.loader');
},
success: function(data) {
unBlockUI('.loader');
retornoAjax(data);
if(data.success == true) {
$('#capa').removeClass('hidden');
$('#capa-img').attr('src', data.arquivo+'?'+ new Date().getTime());
$('#label-crop').html('Trocar de Imagem').show();
$('#submit-crop').addClass('hidden');
$('#label-crop').removeClass('hidden');
$('#view-crop').hide();
$('#form-crop')[0].reset();
location.reload();
}
},
error: function(data) {
unBlockUI('.loader');
$toast = toastr['error']('Informações inválidas. Atualize a página para continuar.');
},
});
});