আমার চিত্রটি একটি বেস 64 স্ট্রিংয়ে রূপান্তর করা দরকার যাতে আমি আমার চিত্রটি একটি সার্ভারে প্রেরণ করতে পারি।
এর জন্য কি কোনও জাভাস্ক্রিপ্ট ফাইল রয়েছে? অন্যথায়, আমি কীভাবে এটি রূপান্তর করতে পারি?
আমার চিত্রটি একটি বেস 64 স্ট্রিংয়ে রূপান্তর করা দরকার যাতে আমি আমার চিত্রটি একটি সার্ভারে প্রেরণ করতে পারি।
এর জন্য কি কোনও জাভাস্ক্রিপ্ট ফাইল রয়েছে? অন্যথায়, আমি কীভাবে এটি রূপান্তর করতে পারি?
উত্তর:
আপনি <canvas>
এটির জন্য এইচটিএমএল 5 ব্যবহার করতে পারেন :
একটি ক্যানভাস তৈরি করুন, এতে আপনার চিত্রটি লোড করুন এবং তারপরে toDataURL()
বেস 64৪ প্রতিনিধিত্ব পেতে ব্যবহার করুন (আসলে এটি একটি data:
ইউআরএল, তবে এতে বেস64-এনকোডযুক্ত চিত্র রয়েছে)।
toDataURL
যেমন callbacks উপর দিতে নিয়ন্ত্রণ done/fail/always
হিসাবে XHR ক্ষেত্রে দেখা যায়?
আপনি চয়ন করতে পারেন একাধিক পদ্ধতি আছে:
এক্সএমএলএইচটিপিআরকুয়েস্টের মাধ্যমে ছবিটি ব্লব হিসাবে লোড করুন এবং এটি একটি ডেটাআরএলতে রূপান্তর করতে ফাইলরিডার এপিআই ব্যবহার করুন :
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
(Chrome)
ব্রাউজার সমর্থন:
ইন্টারনেট এক্সপ্লোরার 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
});
আপনি ফাইলএপিআই ব্যবহার করতে পারেন তবে এটি অনেকটা অসমর্থিত।
আমি যতদূর জানি, একটি চিত্র ফাইলআরডিডার () দ্বারা বা ক্যানভাস উপাদানটিতে সংরক্ষণ করে একটি বেস 64 স্ট্রিংয়ে রূপান্তরিত হতে পারে এবং তারপরে চিত্রটি পেতে ডেটা URL () ব্যবহার করুন। আমার একই ধরণের সমস্যা ছিল আপনি এটি উল্লেখ করতে পারেন।
এই কোড ব্যবহার করে দেখুন:
একটি ফাইল আপলোড পরিবর্তন ইভেন্টের জন্য, এই ফাংশনটিতে কল করুন:
$("#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();
}
গোপনে বেস 64 ডেটা ব্যবহারের জন্য সঞ্চয় করুন।
uploadProfile(e) {
let file = e.target.files[0];
let reader = new FileReader();
reader.onloadend = function() {
console.log('RESULT', reader.result)
}
reader.readAsDataURL(file);
}
ঠিক আছে, আপনি যদি ডোজো টুলকিট ব্যবহার করছেন তবে এটি আমাদের বেস 64 এ এনকোড বা ডিকোড করার সরাসরি উপায় দেয়।
এটা চেষ্টা কর:
Dojox.encoding.base64 ব্যবহার করে বাইটের একটি অ্যারে এনকোড করতে:
var str = dojox.encoding.base64.encode(myByteArray);
একটি বেস 64-এনকোড স্ট্রিংটি ডিকোড করতে:
var bytes = dojox.encoding.base64.decode(str);