首页 文章

如何使用javascript将图像转换为base64字符串

提问于
浏览
371

我需要将我的图像转换为base64字符串,以便我可以将我的图像发送到服务器 . 这个有没有js文件......?否则如何转换它

10 回答

  • 4

    您可以使用HTML5 <canvas>

    创建一个画布,将图像加载到其中,然后使用toDataURL()获取base64表示(实际上,它是一个 data: URL,但它包含base64编码的图像) .

  • 651

    基本上,如果你的形象是

    <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, 0, 0, c.width, c.height);
    var base64String = c.toDataURL();
    
  • 10

    您可以选择多种方法:

    1.方法:FileReader

    通过XMLHttpRequest将图像加载为blob并使用FileReader API将其转换为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 _558167实现:

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

    These approaches:

    • 缺乏浏览器支持

    • 有更好的压缩

    • 也适用于其他文件类型

    Browser Support:


    2.方法:画布

    将图像加载到Image-Object中,将其绘制到非污染画布并将画布转换回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)
      }
    )
    

    in detail

    Supported input formats:

    image/pngimage/jpegimage/jpgimage/gifimage/bmpimage/tiffimage/x-iconimage/svg+xmlimage/webpimage/xxx

    Supported output formats:

    image/pngimage/jpegimage/webp (铬)

    Browser Support:


    3.方法:来自本地文件系统的图像

    如果要从用户文件系统转换图像,则需要采用不同的方法 . 使用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)" />
    
  • 18

    这就是我做的

    //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)
    })
    
  • 4

    您可以使用FileAPI,但它几乎不受支持 .

  • 67

    如果你有一个文件对象,这个简单的函数将起作用:

    function getBase64 (file,callback) {
    
        const reader = new FileReader();
    
        reader.addEventListener('load', () => callback(reader.result));
    
        reader.readAsDataURL(file);
    }
    

    用法前 - : -

    getBase64(fileObjectFromInput, function(base64Data){
        console.log("base 64 of file is",base64Data);//here you can have your code which uses base64 for its operation,//file to base64 by oneshubh
    });
    
  • 151

    好吧,如果您使用的是dojo,它为我们提供了直接编码或解码为base64的方法 .

    试试这个:

    使用dojox.encoding.base64编码字节数组:

    var str = dojox.encoding.base64.encode(myByteArray);
    

    要解码base64编码的字符串:

    var bytes = dojox.encoding.base64.decode(str);
    
  • 4

    据我所知,图像可以通过FileReader()转换为base64字符串,或者将其存储在canvas元素中,然后使用toDataURL()来获取图像 . 我有类似的问题你可以参考这个 .

    Convert an image to canvas that is already loaded

  • 0

    此代码段可以将您的字符串,图像甚至视频文件转换为base64字符串数据 . 尝试一次......

    <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>
    
  • 1

    试试这段代码

    文件上传Chnage事件ccall此功能

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

    将base64data存储在隐藏文件中以供使用 .

相关问题