मुझे अपनी छवि को बेस 64 स्ट्रिंग में बदलने की आवश्यकता है ताकि मैं अपनी छवि को एक सर्वर पर भेज सकूं।
क्या इसके लिए कोई जावास्क्रिप्ट फाइल है? और, मैं इसे कैसे बदल सकता हूं?
मुझे अपनी छवि को बेस 64 स्ट्रिंग में बदलने की आवश्यकता है ताकि मैं अपनी छवि को एक सर्वर पर भेज सकूं।
क्या इसके लिए कोई जावास्क्रिप्ट फाइल है? और, मैं इसे कैसे बदल सकता हूं?
जवाबों:
आप इसके लिए HTML5 का उपयोग कर सकते हैं <canvas>
:
एक कैनवास बनाएं, उसमें अपनी छवि लोड करें और फिर उपयोग करें toDataURL()
बेस 64 प्रतिनिधित्व प्राप्त करने के लिए करें (वास्तव में, यह एक data:
URL है, लेकिन इसमें बेस 64-एन्कोडेड छवि है)।
toDataURL
कॉलबैक पर नियंत्रण देना जैसे कि done/fail/always
xhr के लिए मामला है?
कई दृष्टिकोण हैं जिन्हें आप चुन सकते हैं:
के माध्यम से ब्लॉब के रूप में छवि लोड XMLHttpRequest और प्रयोग FileReader एपीआई यह एक में बदलने के लिए dataURL :
function toDataURL(url, callback) {
var xhr = new XMLHttpRequest();
xhr.onload = function() {
var reader = new FileReader();
reader.onloadend = function() {
callback(reader.result);
}
reader.readAsDataURL(xhr.response);
};
xhr.open('GET', url);
xhr.responseType = 'blob';
xhr.send();
}
toDataURL('https://www.gravatar.com/avatar/d50c83cc0c6523b4d3f6085295c953e0', function(dataUrl) {
console.log('RESULT:', dataUrl)
})
इस कोड उदाहरण को WHATWG भ्रूण API का उपयोग करके भी लागू किया जा सकता है :
const toDataURL = url => fetch(url)
.then(response => response.blob())
.then(blob => new Promise((resolve, reject) => {
const reader = new FileReader()
reader.onloadend = () => resolve(reader.result)
reader.onerror = reject
reader.readAsDataURL(blob)
}))
toDataURL('https://www.gravatar.com/avatar/d50c83cc0c6523b4d3f6085295c953e0')
.then(dataUrl => {
console.log('RESULT:', dataUrl)
})
ये दृष्टिकोण:
ब्राउज़र समर्थन:
छवि को एक छवि-ऑब्जेक्ट में लोड करें, इसे एक गैर-प्राप्त कैनवास पर पेंट करें और कैनवास को वापस डेटाूर में परिवर्तित करें।
function toDataURL(src, callback, outputFormat) {
var img = new Image();
img.crossOrigin = 'Anonymous';
img.onload = function() {
var canvas = document.createElement('CANVAS');
var ctx = canvas.getContext('2d');
var dataURL;
canvas.height = this.naturalHeight;
canvas.width = this.naturalWidth;
ctx.drawImage(this, 0, 0);
dataURL = canvas.toDataURL(outputFormat);
callback(dataURL);
};
img.src = src;
if (img.complete || img.complete === undefined) {
img.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
img.src = src;
}
}
toDataURL(
'https://www.gravatar.com/avatar/d50c83cc0c6523b4d3f6085295c953e0',
function(dataUrl) {
console.log('RESULT:', dataUrl)
}
)
समर्थित इनपुट प्रारूप:
image/png
, image/jpeg
, image/jpg
, image/gif
, image/bmp
, image/tiff
, image/x-icon
, image/svg+xml
, image/webp
,image/xxx
समर्थित आउटपुट स्वरूप:
image/png
, image/jpeg
, image/webp
(क्रोम)
ब्राउज़र समर्थन:
इंटरनेट एक्सप्लोरर 10 (इंटरनेट एक्सप्लोरर 10 सिर्फ एक ही मूल चित्रों के साथ काम करता है)
यदि आप उपयोगकर्ताओं को फ़ाइल सिस्टम से छवियों को परिवर्तित करना चाहते हैं, तो आपको एक अलग दृष्टिकोण लेने की आवश्यकता है। FileReader API का उपयोग करें :
function encodeImageFileAsURL(element) {
var file = element.files[0];
var reader = new FileReader();
reader.onloadend = function() {
console.log('RESULT', reader.result)
}
reader.readAsDataURL(file);
}
<input type="file" onchange="encodeImageFileAsURL(this)" />
Image from origin **** has been blocked from loading by Cross-Origin Resource Sharing policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://fiddle.jshell.net' is therefore not allowed access.
यह स्निपेट आपकी स्ट्रिंग, छवि और यहां तक कि वीडियो फ़ाइल को बेस 64 स्ट्रिंग डेटा में बदल सकता है।
<input id="inputFileToLoad" type="file" onchange="encodeImageFileAsURL();" />
<div id="imgTest"></div>
<script type='text/javascript'>
function encodeImageFileAsURL() {
var filesSelected = document.getElementById("inputFileToLoad").files;
if (filesSelected.length > 0) {
var fileToLoad = filesSelected[0];
var fileReader = new FileReader();
fileReader.onload = function(fileLoadedEvent) {
var srcData = fileLoadedEvent.target.result; // <--- data: base64
var newImage = document.createElement('img');
newImage.src = srcData;
document.getElementById("imgTest").innerHTML = newImage.outerHTML;
alert("Converted Base64 version is " + document.getElementById("imgTest").innerHTML);
console.log("Converted Base64 version is " + document.getElementById("imgTest").innerHTML);
}
fileReader.readAsDataURL(fileToLoad);
}
}
</script>
असल में, अगर आपकी छवि है
<img id='Img1' src='someurl'>
तो आप इसे बदल सकते हैं
var c = document.createElement('canvas');
var img = document.getElementById('Img1');
c.height = img.naturalHeight;
c.width = img.naturalWidth;
var ctx = c.getContext('2d');
ctx.drawImage(img, 0, 0, c.width, c.height);
var base64String = c.toDataURL();
<img id='Img1' src='someurl' crossorigin='anonymous'>
मैंने जो किया था यह रहा:
// Author James Harrington 2014
function base64(file, callback){
var coolFile = {};
function readerOnload(e){
var base64 = btoa(e.target.result);
coolFile.base64 = base64;
callback(coolFile)
};
var reader = new FileReader();
reader.onload = readerOnload;
var file = file[0].files[0];
coolFile.filetype = file.type;
coolFile.size = file.size;
coolFile.filename = file.name;
reader.readAsBinaryString(file);
}
और यहां बताया गया है कि आप इसका उपयोग कैसे करते हैं
base64( $('input[type="file"]'), function(data){
console.log(data.base64)
})
मैंने पाया कि इसका उपयोग करने का सबसे सुरक्षित और विश्वसनीय तरीका है FileReader()
।
डेमो: बेस 64 के लिए छवि
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<input id="myinput" type="file" onchange="encode();" />
<div id="dummy">
</div>
<div>
<textarea style="width:100%;height:500px;" id="txt">
</textarea>
</div>
<script>
function encode() {
var selectedfile = document.getElementById("myinput").files;
if (selectedfile.length > 0) {
var imageFile = selectedfile[0];
var fileReader = new FileReader();
fileReader.onload = function(fileLoadedEvent) {
var srcData = fileLoadedEvent.target.result;
var newImage = document.createElement('img');
newImage.src = srcData;
document.getElementById("dummy").innerHTML = newImage.outerHTML;
document.getElementById("txt").value = document.getElementById("dummy").innerHTML;
}
fileReader.readAsDataURL(imageFile);
}
}
</script>
</body>
</html>
यदि आपके पास कोई फ़ाइल ऑब्जेक्ट है, तो यह सरल कार्य करेगा:
function getBase64 (file, callback) {
const reader = new FileReader();
reader.addEventListener('load', () => callback(reader.result));
reader.readAsDataURL(file);
}
उपयोग उदाहरण:
getBase64(fileObjectFromInput, function(base64Data){
console.log("Base64 of file is", base64Data); // Here you can have your code which uses Base64 for its operation, // file to Base64 by oneshubh
});
आप FileAPI का उपयोग कर सकते हैं , लेकिन यह बहुत ज्यादा असमर्थित है।
जहाँ तक मुझे पता है, एक छवि को बेस 64 स्ट्रिंग में या तो फाइलराइडर () द्वारा परिवर्तित किया जा सकता है या इसे कैनवास तत्व में संग्रहीत किया जा सकता है और फिर छवि प्राप्त करने के लिए toDataURL () का उपयोग कर सकते हैं। मुझे इस तरह की समस्या थी आप इसका उल्लेख कर सकते हैं।
इस कोड को आज़माएं:
फ़ाइल अपलोड परिवर्तन ईवेंट के लिए, इस फ़ंक्शन को कॉल करें:
$("#fileproof").on('change', function () {
readImage($(this)).done(function (base64Data) { $('#<%=hfimgbs64.ClientID%>').val(base64Data); });
});
function readImage(inputElement) {
var deferred = $.Deferred();
var files = inputElement.get(0).files;
if (files && files[0]) {
var fr = new FileReader();
fr.onload = function (e) {
deferred.resolve(e.target.result);
};
fr.readAsDataURL(files[0]);
} else {
deferred.resolve(undefined);
}
return deferred.promise();
}
Base64 डेटा को उपयोग करने के लिए छिपे हुए स्टोर में रखें।
uploadProfile(e) {
let file = e.target.files[0];
let reader = new FileReader();
reader.onloadend = function() {
console.log('RESULT', reader.result)
}
reader.readAsDataURL(file);
}
ठीक है, यदि आप Dojo टूलकिट का उपयोग कर रहे हैं, तो यह हमें Base64 में एन्कोड या डिकोड करने का एक सीधा तरीका देता है।
इसे इस्तेमाल करे:
Dojox.encoding.base64 का उपयोग करके बाइट्स के एक सरणी को एनकोड करने के लिए:
var str = dojox.encoding.base64.encode(myByteArray);
बेस 64-एन्कोडेड स्ट्रिंग को डीकोड करने के लिए:
var bytes = dojox.encoding.base64.decode(str);