javascript 图片(image)转换base64

ppylox
·11/25/2020·0 阅读
AI 摘要模型根据正文自动生成,仅供参考

本文介绍JavaScript将图片转换为base64字符串的两种方法,便于以字符串形式存入数据库。方法一基于canvas:创建canvas并绘制图片,调用toDataURL生成base64;需注意网络图片跨域会导致Tainted canvases报错,可设置crossOrigin并添加随机数避免缓存。方法二基于FileReader:通过readAsDataURL读取input上传的图片文件,并校验文件类型。两种方法代码均可保存为HTML直接运行。

项目里面有些模块会有图片显示功能,一般情况下我们都是将文件以jpg/png格式上传到项目中,再在代码中把img的src属性改成图片的路径就能正常显示,但是某些情况下不需要以文件形式存放图片文件,需要将图片以字符串格式保存到数据库中要怎么办呢?

这时候可以考虑将图片转成base64字符串格式,这样就可以很方便保存跟引用了,当然文件大小尽量控制小一些,不然转成base64后长度会很长,下面介绍两种常规将图片转成base64的方法,可以定制成自己的小工具:

方法一: canvas,该方法就是通过javascript中的canvas属性将图片转成base64,主要用到了canvas中的toDataUrl方法,该方法可以将canvas转成base64,所以关键点就是先获取图片的宽高,再将图片放入canvas中,再使用toDataUrl就可以转成base64了。如果在本地引用网络图片可能会出现报错:Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported. 因为此时会产生跨域,我们在使用canvas.toDataURL时,如果DOM内存在图片资源,该资源所在的web-server是不支持跨域的,保存图片是不会成功的,所以最好每一次都加个随机数,以保证源都是最新的,不走缓存,这样每次刷新或更新图片就能正常显示了。

<html>\n<head>\n  <meta charset="utf-8">\n  <title>通过filereader接口读取文件</title>\n  <script type="text/javascript">\n    function getBase64Image(img) {\n        var canvas = document.createElement("canvas");\n        canvas.width = img.width;\n        canvas.height = img.height;\n        var ctx = canvas.getContext("2d");\n        ctx.drawImage(img, 0, 0, img.width, img.height);\n        var dataURL = canvas.toDataURL("image/png");\n        return dataURL\n        // return dataURL.replace("data:image/png;base64,", "");\n    }\n\n    function main() {\n        var img = document.createElement('img');\n        img.src = 'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=3922290090,3177876335&fm=26&gp=0.jpg?v=' + Math.random();  //此处自己替换本地图片的地址\n        img.crossOrigin= 'anonymous'\n        img.onload =function() {\n          debugger\n            var data = getBase64Image(img);\n            var img1 = document.createElement('img');\n            img1.src = data;\n            document.body.appendChild(img1);\n            console.log(data);\n        }\n    }\n    main()\n</script>\n</head>\n\n<body>\n</body>\n\n</html>\n

方法二:FileReader,该方法就是使用javascript的原生方法,通过FileReader的readAsDataURL方法就可将通过input上传的图片文件转成base64

<html>\n<head>\n    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />\n    <title>通过filereader接口读取文件</title>\n    <script type="text/javascript">\n        function readAsDataURL()\n        {\n            if(typeof FileReader=='undifined')          //判断浏览器是否支持filereader\n            {\n                result.innerHTML="<p>抱歉,你的浏览器不支持 FileReader</p>";\n                return false;\n            }\n            var file=document.getElementById("imagefile").files[0];\n            if(!/image\\/\\w+/.test(file.type))           //判断获取的是否为图片文件\n            {\n                alert("请确保文件为图像文件");\n                return false;\n            }\n            var reader=new FileReader();\n            reader.readAsDataURL(file);\n            reader.onload=function(e)\n            {\n                var result=document.getElementById("result");\n                result.innerHTML='<img src="'+this.result+'" alt=""/>'\n            }\n\n        }\n    </script>\n</head>\n\n<body>\n<p>\n    <label>请选择一个文件:</label>\n    <input type="file" id="imagefile" />\n    <input type="button" value="读取图像" onClick="readAsDataURL();" />\n</p>\n<div name="result" id="result">\n    <!-- 这里用来显示图片结果-->\n</div>\n</body>\n</html>\n

以上两种方法可以直接将对应方法下面的代码保存成html文件,直接打开就可以使用。

相关文章

评论 (0)

暂无评论,来写第一条吧