JS前端转本地图片为base64

JS前端转换本地图片路径为base64,请问怎么实现,不能file. input上传

路径如下:

file:///C:/Users/XIAORU~1/AppData/Local/Temp/ksohtml13208/wps80.jpg

由于浏览器安全限制的原因,js是默认无法直接操作本地文件的,给你一个input的方式和只能运行在IE直接读取本地文件:

<input class="ut myHide" id="uploadFile" name="uploadFile" type="file" onchange="btnUploadFile(event)" /> 
 
 <script>
 function btnUploadFile(e){
     //获取图片文件 
      var imgFile = e.target.files[0];
      changeFileIntoBase64(imgFile).then(function(res){
        console.log(res);
      })
}
/**
 * @description 转换文件成base64数据
 * @param {Object} file - 文件对象
 */
function changeFileIntoBase64(file) {
    return new Promise((resolve, reject) => {
        const fr = new FileReader();
          fr.readAsDataURL(file);
          fr.onload = (result) => {
            const base64Str = result.currentTarget.result;
            resolve(base64Str);
           };
    });
}
 </script>

只兼容id,直接读取本地:


```javascript
 <script>
var fso = new ActiveXObject('Scripting.FileSystemObject')
var fileName = 'C:\\Users\\Lenovo\\Desktop\\ai\\1.png'
   var Filesss = fso.GetFile(fileName)
   var base64str
   var x = new ActiveXObject('Msxml2.XMLHTTP.6.0')
   x.onreadystatechange = function(){
     if(x.readyState < 4) return
     var xml_dom = new ActiveXObject('MSXML2.DOMDocument')
     var tmpNode = xml_dom.createElement('tmpNode')
     tmpNode.dataType = 'bin.base64'
     tmpNode.nodeTypedValue = x.responseBody
     base64str = tmpNode.text.replace(/\n/g,'')
  }
  x.open('get',fileName,true)
  x.send('')
  console.log(base64str)

 </script>

```

给一个可以参考的例子:https://blog.csdn.net/wang_9909/article/details/116673446

#JS实现Base64编码

/**
         *  1.0  FileReader
         */
        
        // let img = document.querySelector("input");
        //     img.onchange = function(e){
        //         let file = this.files[0];
        //         imgToBase64(file,show);
        //     }
        function imgToBase64(file,callback){
            let f = new FileReader();
            f.readAsDataURL(file);
            f.onload = function(){
                let base64 = f.result;
                callback.call(this,base64)
            }
        }

        function show(code) {
            console.log('size:'+code);
            document.querySelector('img').setAttribute('src',code);
        }


        /**
         *  2.0   canvas重绘
         *        可以压缩图片
         */
        function imgToBase64(url,callback){
            let canvas = document.createElement("canvas");
            let ctx = canvas.getContext("2d");
            let img = new Image();
            img.crossOrigin = 'Anonymous';
            img.src = url;
            img.onload = function () {
                console.log(url)
                canvas.height = this.height; //指定画板的高度,自定义
                canvas.width = this.width; //指定画板的宽度,自定义
                ctx.drawImage(img, 0, 0,this.width,this.height); //参数可自定义
                var dataURL = canvas.toDataURL("image/jpeg",1);
                callback.call(this, dataURL); //回掉函数获取Base64编码
                canvas = null;
            };
         }

         /**
          *  Base64.js
          */
         let code = $.base64.encode('223841');
         console.log('base64编码后:'+code);
         console.log('base64解码后:'+$.base64.decode(code));


         //imgToBase64('https://pics0.baidu.com/feed/3b292df5e0fe992518448ccedf8964d58cb17194.jpeg?token=a8af55e099d7507f313330013f84d5dc',show)


参考自链接:https://huaweicloud.csdn.net/638f154bdacf622b8df8f31e.html?spm=1001.2101.3001.6650.15&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-15-125715471-blog-119575246.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-15-125715471-blog-119575246.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=22

可以使用 JavaScript 的 FileReader 类来将本地图片路径转换为 base64 编码。

首先,需要获取到图片的本地路径,可以使用 input 标签或者拖拽事件来获取。然后,创建一个 FileReader 对象,并使用 readAsDataURL 方法将图片转换为 base64 编码。最后,可以使用 onload 事件监听器来获取转换后的 base64 编码。

例如:

// HTML
<input type="file" id="fileInput" />

// JavaScript
const fileInput = document.getElementById('fileInput');
const file = fileInput.files[0];

const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => {
  const base64 = reader.result;
  console.log(base64);
};

请注意,上面的代码只能在本地环境中使用,因为在浏览器中无法直接访问本地文件系统。如果要在浏览器中实现这个功能,可以使用服务器端代码将本地文件转换为 base64 编码,然后再返回给浏览器。

原生js实现方式参考下面的代码:


var img = "imgurl";//imgurl 本地图片路径
 
function getBase64Image(img) { 
     var canvas = document.createElement("canvas"); 
     canvas.width = img.width; 
     canvas.height = img.height; 
     var ctx = canvas.getContext("2d"); 
     ctx.drawImage(img, 0, 0, img.width, img.height); 
     var ext = img.src.substring(img.src.lastIndexOf(".")+1).toLowerCase(); 
     var dataURL = canvas.toDataURL("image/"+ext); 
     return dataURL; 
} 
 
var image = new Image(); 
image.src = img; 
image.onload = function(){ 
  var base64 = getBase64Image(image); 
  console.log(base64); 
} 

先file控件读取文件接着【FileReader读取】或【赋值个img的src上等图片加载完成后将其画到canvas画布上 然后canvas.toDataURL() 导出】 两个方式都可以