চিত্রটি বেস 64 তে রূপান্তর করুন


84
<input type="file" id="asd"/>

আমি একবার ব্যবহারকারী এটি বেছে নেওয়ার পরে বেস 64 এ ছবিটি পেতে চাই (ফর্ম জমা দেওয়ার আগে)

কিছুটা এইরকম :

$(input).on('change',function(){
  var data = $(this).val().base64file(); // it is not a plugin is just an example
  alert(data);
});

আমি ফাইল এপিআই এবং অন্যান্য স্টাফগুলি সম্পর্কে পড়েছি, আমি একটি সাধারণ এবং ক্রস-ব্রাউজার সমাধান চাই (আই 6 / আই 7 স্পষ্টতই বাদ দেওয়া হয়নি)

কোন সাহায্য ধন্যবাদ প্রশংসা।


4
আর HTML5 ফাইল এপিআই সম্পর্কে আপনি কী বুঝতে পারলেন না? তুমি কি চেষ্টা করেছ? কি কাজ হয়নি?
এপাসকারেলো

@ পেসারকেলো তারা সম্পূর্ণরূপে সমর্থিত নয় ক্যানিউজ.com/#feat= fileapi আমার চারপাশে কাজ করা দরকার, বিশেষ করে অ্যান্ড্রয়েড সংস্করণগুলি এখনও (পুরানো সংস্করণ) পাশাপাশি পুরানো আইওএস সংস্করণগুলির জন্য ব্যবহৃত হয় এবং আমি আইই 9 কেও জড়িত করতে চাই এখনও প্রচুর ব্যবহৃত হয়: পি
বোম্বাস্টিক

কি জন্য একটি workaround? আপনি ফাইলটি কী করার চেষ্টা করছেন? base64file()- এটা কি প্লাগইন?
ডেভিড হেলসিং

@David আমি শুধু করুন Base64- ফাইল ব্যবহারকারী একবার তার পিসি থেকে ফাইল নির্বাচন পেতে চাই, base64file () শুধু একটি উদাহরণ
শব্দাড়ম্বরপূর্ণ

4
@ পেসারকেলো হ্যাঁ এবং এটাই ছিল আমার প্রশ্ন, সমস্ত ব্রাউজারগুলিকে কীভাবে সমর্থন করা যায়: ডি
বোম্বাস্টিক

উত্তর:


212

function readFile() {
  
  if (this.files && this.files[0]) {
    
    var FR= new FileReader();
    
    FR.addEventListener("load", function(e) {
      document.getElementById("img").src       = e.target.result;
      document.getElementById("b64").innerHTML = e.target.result;
    }); 
    
    FR.readAsDataURL( this.files[0] );
  }
  
}

document.getElementById("inp").addEventListener("change", readFile);
<input id="inp" type='file'>
<p id="b64"></p>
<img id="img" height="150">

( পিএস: একটি বেস 64 এনকোডড চিত্র (স্ট্রিং) 4/3 মূল চিত্রের আকারের)

একাধিক চিত্র আপলোডের জন্য এই উত্তরটি দেখুন

ব্রাউজার সমর্থন: http://caniuse.com/#search=file%20api
এখানে আরও তথ্য: https://developer.mozilla.org/en-US/docs/Web/API/FileReader


4
হ্যাঁ আপনাকে ধন্যবাদ, তাই আসলে আমি দেখতে পাচ্ছি ফাইল রিডার সম্পূর্ণরূপে সমর্থিত নয়, আমি কীভাবে একই সমর্থনকারীকে পুরানো অ্যান্ড্রয়েড / আইওএস ডিভাইসগুলি তৈরি করতে পারি?
বোম্বাস্টিক

4
অন্য কোন ব্রাউজার আছে? এক্সডি
রিকার্ডোই

এটি ইমেজটির জন্য বেস 64 টি রূপান্তর করার জন্য খুব ঝরঝরে কোড ছিল .. আমি কি জাভাস্ক্রিপ্টে এটিকে আবার চিত্রে রূপান্তর করতে সক্ষম হতে পারি? আমি এর আগে বেস 64৪ এনকোড ডিকোড ব্যবহার করেছি, তবে চিত্র রূপান্তর সম্পর্কে কোনও ধারণা নেই ..
দ্য কোডার

@TheCoder আপনি এটিকে চিত্রের ডেটা বের করতে, ক্যানভাস প্রসঙ্গটি ব্যবহার করতে, এটি সরাসরি বেস 64 string স্ট্রিং হিসাবে img src এ রাখতে পারেন।
কিওয়ার্টি

4
@ বম্বাস্টিক আমি উভয় প্ল্যাটফর্মে আইওএস এবং অ্যান্ড্রয়েড অ্যাপ উভয়ই ঠিকঠাকভাবে তৈরি করতে জেএস ব্যবহার করেছি। আইওএসটি স্বাভাবিক এবং অ্যান্ড্রয়েডে, গ্যালারীটির অনুমতি পাওয়ার জন্য আমার কিছু নেটিভ কোডের প্রয়োজন ছিল ...
ওসমান গণি খান মাসুম

35

ঠিক আপনার যা প্রয়োজন :) আপনি কলব্যাক সংস্করণ বা প্রতিশ্রুতি সংস্করণ চয়ন করতে পারেন। নোট করুন যে প্রতিশ্রুতিগুলি কেবল প্রতিশ্রুতি পলফিল লাইব দিয়ে IE এ কাজ করবে। আপনি এই কোডটি একবার পৃষ্ঠায় রাখতে পারেন এবং এই ফাংশনটি আপনার সমস্ত ফাইলে প্রদর্শিত হবে।

কোনও উত্স লোড করার সময় অগ্রগতি বন্ধ হয়ে গেলে লোডেন্ড ইভেন্টটি বরখাস্ত করা হয় (উদাহরণস্বরূপ "ত্রুটি", "বাতিল" বা "লোড" প্রেরণের পরে)

কলব্যাক সংস্করণ

        File.prototype.convertToBase64 = function(callback){
                var reader = new FileReader();
                reader.onloadend = function (e) {
                    callback(e.target.result, e.target.error);
                };   
                reader.readAsDataURL(this);
        };

        $("#asd").on('change',function(){
          var selectedFile = this.files[0];
          selectedFile.convertToBase64(function(base64){
               alert(base64);
          }) 
        });

প্রতিশ্রুতি সংস্করণ

    File.prototype.convertToBase64 = function(){
         return new Promise(function(resolve, reject) {
                var reader = new FileReader();
                reader.onloadend = function (e) {
                    resolve({
                      fileName: this.name,
                      result: e.target.result, 
                      error: e.target.error
                    });
                };   
                reader.readAsDataURL(this);
        }.bind(this)); 
    };

    FileList.prototype.convertAllToBase64 = function(regexp){
      // empty regexp if not set
      regexp = regexp || /.*/;
      //making array from FileList
      var filesArray = Array.prototype.slice.call(this);
      var base64PromisesArray = filesArray.
           filter(function(file){
             return (regexp).test(file.name)
           }).map(function(file){
             return file.convertToBase64();
           });
      return Promise.all(base64PromisesArray);
    };

    $("#asd").on('change',function(){
      //for one file
      var selectedFile = this.files[0];
      selectedFile.convertToBase64().
          then(function(obj){
            alert(obj.result);
          });
      });
      //for all files that have file extention png, jpeg, jpg, gif
      this.files.convertAllToBase64(/\.(png|jpeg|jpg|gif)$/i).then(function(objArray){
            objArray.forEach(function(obj, i){
                  console.log("result[" + obj.fileName + "][" + i + "] = " + obj.result);
            });
      });
    })

এইচটিএমএল

<input type="file" id="asd" multiple/>

8
<input type="file" onchange="getBaseUrl()">
function getBaseUrl ()  {
    var file = document.querySelector('input[type=file]')['files'][0];
    var reader = new FileReader();
    var baseString;
    reader.onloadend = function () {
        baseString = reader.result;
        console.log(baseString); 
    };
    reader.readAsDataURL(file);
}

4
'ফাইল' ঘোষিত হয়েছে তবে getBaseUrl () ফাংশনের অভ্যন্তরে এর মানটি কখনই পঠিত হয় না।
বিরানচি

@ বিরাঞ্চি fileশেষ লাইনে ব্যবহৃত হয়reader.readAsDataURL(file);
আচিম

7

এক্ষেত্রে ডিফার্ড অবজেক্টের সাথে কাজ করা এবং প্রতিশ্রুতি ফেরানো কার্যকর:

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();
}

এবং উপরের ফাংশনটি এভাবে ব্যবহার করা যেতে পারে:

var inputElement = $("input[name=file]");
readImage(inputElement).done(function(base64Data){
    alert(base64Data);
});

বা আপনার ক্ষেত্রে:

$(input).on('change',function(){
  readImage($(this)).done(function(base64Data){ alert(base64Data); });
});

আমি সত্যিই এটির প্রয়োজন ছিল, আমার অর্থ পিছনের সাথে যেহেতু আমি বেস 64 কল করার পদ্ধতিতে ফিরে আসছি। আমি জানতে চাই যে আপনার সমাধানটি সমস্ত ব্রাউজারে কাজ করবে কিনা?
থমিম

0

// https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL

/* Simple */
function previewImage( image, preview, string )
{

    var preview     = document.querySelector( preview );
    var fileImage   = image.files[0];

    var reader      = new FileReader();

    reader.addEventListener( "load", function() {

        preview.style.height    = "100";
        preview.title           = fileImage.name;

        // convert image file to base64 string
        preview.src             = reader.result;

        /* --- */

        document.querySelector( string ).value = reader.result;                    

    }, false );

    if ( fileImage )
    {
        reader.readAsDataURL( fileImage );
    }

}

document.querySelector( "#imageID" ).addEventListener( "change", function() {

    previewImage( this, "#imagePreviewID", "#imageStringID" );

} )
/* Simple || */
<form>

    File Upload: <input type="file" id="imageID" /><br />
    Preview: <img src="#" id="imagePreviewID" /><br />    
    String base64: <textarea id="imageStringID" rows="10" cols="50"></textarea>

</form>

কোডানবক্স

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.