La soluzione che ho usato:
In primo luogo io uso un 3rd party libreria javascript per selezionare l'area di ritaglio come jCrop. Una volta ottenute le coordinate (x1, x2, y1, y2), disegno una copia di un'immagine su una tela.
var canvas = document.getElementById('drawcanvas');
var context = canvas.getContext('2d');
canvas.width = canvas.width; // clear canvas
var imageObj = new Image();
imageObj.onload = function() {
// draw cropped image
// ...
context.drawImage(imageObj, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, sourceWidth, sourceHeight);
var dataURL = canvas.toDataURL();
};
imageObj.src = // image url
Dopo ho disegnato tela, ho convertito la tela di un DataURL che è in formato base64. Una volta ottenuto il DataURL, utilizzo questa funzione che ho trovato da Internet dove converte DataURL in dati binari non elaborati.
DataURLConverter: function(data) {
// convert base64 to raw binary data held in a string
// doesn't handle URLEncoded DataURIs
var byteString = atob(data.split(',')[1]);
// separate out the mime component
var mimeString = data.split(',')[0].split(':')[1].split(';')[0]
// write the bytes of the string to an ArrayBuffer
var ab = new ArrayBuffer(byteString.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return ia;
}
Quando abbiamo ottenuto i dati binari, li carichiamo direttamente su Parse.com. Carica per analizzare con 'ia' come dati
var serverUrl = 'https://api.parse.com/1/files/' + fileName;
$.ajax({
type: "POST",
beforeSend: function(request) {
request.setRequestHeader("X-Parse-Application-Id", "App id");
request.setRequestHeader("X-Parse-REST-API-Key", "API Key");
request.setRequestHeader("Content-Type", "File type");
},
url: serverUrl,
data: ia,
processData: false,
contentType: false,
success: function(data) {
},
error: function(data) {
}
});
dovrebbe essere possibile con HTML5. http://hacks.mozilla.org/2011/01/how-to- develop-a-html5-image-uploader/ – Nisd