Giải pháp tôi sử dụng:
Trước tiên tôi sử dụng một bên thứ 3 javascript thư viện để chọn vùng cắt như jCrop. Khi tôi đã nhận được tọa độ (x1, x2, y1, y2), tôi vẽ một bản sao của hình ảnh vào canvas.
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
Sau khi tôi vẽ canvas, tôi đã chuyển canvas thành một DataURL có định dạng base64. Khi tôi đã có DataURL, tôi sử dụng chức năng này tôi tìm thấy từ internet, nơi nó chuyển đổi DataURL thành dữ liệu nhị phân thô.
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;
}
Khi chúng tôi nhận dữ liệu nhị phân, chúng tôi sẽ tải trực tiếp lên Parse.com. Tải lên để phân tích với 'ia' như một dữ liệu
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) {
}
});
Nó phải là có thể với HTML5. http://hacks.mozilla.org/2011/01/how-to- develop-a-html5-image-uploader/ – Nisd