समाधान मैं प्रयोग किया है:
सबसे पहले मैं एक 3 पार्टी जावास्क्रिप्ट पुस्तकालय jCrop तरह त्र चुनने के लिए इस्तेमाल करते हैं। एक बार जब मैं निर्देशांक (x1, x2, y1, y2) प्राप्त करता हूं, तो मैं एक छवि की एक प्रति कैनवास में खींचता हूं।
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
कैनवास खींचने के बाद, मैंने कैनवास को DataURL प्रारूप में परिवर्तित किया है जो बेस 64 प्रारूप में है। एक बार मुझे डेटाURL मिल गया है, मैं इस फ़ंक्शन का उपयोग इंटरनेट से प्राप्त करता हूं जहां यह डेटाURL को कच्चे बाइनरी डेटा में परिवर्तित करता है।
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;
}
जब हमें द्विआधारी डेटा मिला, तो हम इसे सीधे Parse.com पर अपलोड करते हैं। एक डेटा
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) {
}
});
यह एचटीएमएल 5 के साथ संभव होना चाहिए। http://hacks.mozilla.org/2011/01/how-to- विकास-ए-एचटीएमएल 5-छवि-अपलोडर/ – Nisd