前端(三):图片转base64

简介: 图片转base64

效果

image.png

源码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>图片转base64</title>
</head>
<style>
input {
    
    
    margin: 5px 0;
}

#box {
    
    
    width: 500px;
    padding: 10px;
    display: flex;
    justify-content: space-between;
    border: 1px solid #000;
}

textarea {
    
    
    margin: 10px 0;
    display: block;
    width: 500px;
    height: 309px;
    padding: 10px;
    border: 1px solid #000;
    text-align: justify;
    resize: none;
}

img {
    
    
    max-width: 500px;
    max-height: 407px;
    display: none;
    padding: 10px;
    border: 1px solid orange;
    margin: 0 0 0 60px;
}
</style>

<body>
    <h3>图片转base64</h3>
    <p>部分网络图片地址无法转换,可以下载到本地在进行转换</p>
    <div style="display: flex;justify-content: flex-start;">
        <div>
            <div id="box">
                <div>
                    <div>
                        <!-- 网络图片 -->
                        <input type="text" placeholder="http://" id="webImgUrl">
                        <!-- 转化 -->
                        <input type="button" value="base64" onclick="getBase64(document.getElementById('webImgUrl').value)" />
                    </div>
                    <div>
                        <!-- 上传文件 -->
                        <input type="file" id="file" onchange="checkImg(this.id)">
                    </div>
                </div>
                <div>
                    <!-- 复制 -->
                    <input type="button" value="复制" onclick="copy()" />
                    <br>
                    <!-- 清空 -->
                    <input type="button" value="清空" onclick="document.getElementById('base64text').value=''" />
                </div>
            </div>
            <!-- base64 -->
            <textarea id="base64text" placeholder="Base64编码说明
                Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'='。
                为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6=64,这也是Base64名称的由来。" readonly></textarea>
            <!-- 大小 -->
            <p>图片大小:<span id="size" style="color: red">0</span>KB</p>
        </div>
        <div>
            <img src="" alt="By.ProsperLee" id="imgshow">
        </div>
    </div>
    <script>
    /**
     * [checkImg 检查是否为图片]
     * @param  {[String]} fileId [input file 的 Id]
     */
    function checkImg(fileId) {
    
    

        var fileType = document.getElementById(fileId).files[0].type;

        if (fileType.indexOf("image/") == -1) {
    
    

            alert("仅支持图片转码");

            document.getElementById(fileId).value = "";

        } else {
    
    

            getBase64(getFileUrl(fileId));

        }

    }

    /**
     * 获取上传文件地址函数
     * @param  {[String]} sourceId [input file 的 Id]
     * @return {[String]}          [文件地址url]
     */
    function getFileUrl(sourceId) {
    
    

        var url;

        var elUpload = document.getElementById(sourceId);

        if (navigator.userAgent.indexOf("MSIE") >= 1) {
    
     // IE下的地址

            url = elUpload.value;

        } else if (navigator.userAgent.indexOf("Firefox") > 0) {
    
     // Firefox下的地址

            url = window.URL.createObjectURL(elUpload.files.item(0));

        } else if (navigator.userAgent.indexOf("Chrome") > 0) {
    
     // Chrome下的地址

            url = window.URL.createObjectURL(elUpload.files.item(0));

        }

        return url;

    }

    /**
     * [getBase64 转换成base64]
     * @param  {[String]} imgUrl [图片地址]
     */
    function getBase64(imgUrl) {
    
    

        window.URL = window.URL || window.webkitURL;

        var xhr = new XMLHttpRequest();

        xhr.open("get", imgUrl, true);

        // 返回的数据类型
        xhr.responseType = "blob";

        xhr.onload = function() {
    
    

            if (this.status == 200) {
    
    

                // 得到一个blob对象
                var blob = this.response;

                // 输出图片大小
                document.getElementById('size').innerHTML = blob.size / 1024;

                // 文件读取
                let fileReader = new FileReader();

                fileReader.onloadend = function(e) {
    
     // onloadend 当读取操作完成时调用,不管是成功还是失败

                    let base64 = e.target.result;

                    // 展示
                    document.getElementById('base64text').value = base64;
                    document.getElementById('imgshow').style.display = "inline-block";
                    document.getElementById('imgshow').src = base64;

                };

                fileReader.readAsDataURL(blob); // 异步读取文件内容,结果用data:url的字符串形式表示

            }

        }

        xhr.send();

    }

    /**
     * [copy 复制]
     */
    function copy() {
    
    

        var copy = document.getElementById("base64text");

        copy.select(); // 选择对象 

        document.execCommand("Copy"); // 执行浏览器复制命令 

        alert("已复制,可贴粘!"); 

    }

    </script>
</body>

</html>
目录
相关文章
|
5月前
|
前端开发
后端返回图片二进制流,前端转base64
本文介绍了如何将后端返回的图片二进制流转换为Base64格式,以便在前端使用。通过在axios请求中设置`responseType`为`arraybuffer`,然后使用`btoa`和`Uint8Array`进行转换。
427 5
|
5月前
|
前端开发
前端base64转Blob,Blob转文件下载
前端将base64字符串转换为Blob对象,再将Blob对象转换为文件并实现下载。包括处理数据URL和纯base64字符串的情况,并提供了一个辅助函数用于转换。
107 2
|
4月前
|
存储 前端开发 JavaScript
🚀前端轻松实现网页内容转换:一键复制、保存图片及生成 Markdown
在现代前端开发中,提升用户的交互体验至关重要。本文将详细介绍如何使用 HTML2Canvas 和 Turndown 两个强大的 JavaScript 库,实现将网页选中文本转化为图片并保存或复制到剪贴板,或将内容转换为 Markdown 格式。文章包含核心代码实现、技术细节和功能拓展方向,为开发者提供了一个轻量级的解决方案,提升用户体验。
352 68
|
4月前
|
JavaScript 前端开发 Python
django接收前端vue传输的formData图片数据
django接收前端vue传输的formData图片数据
87 4
|
4月前
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
50 1
|
4月前
|
前端开发 JavaScript 编译器
不走弯路,纯前端如何把图片导出成视频!
【10月更文挑战第3天】不走弯路,纯前端如何把图片导出成视频!
169 3
|
4月前
|
JavaScript 前端开发 编译器
吐血整理:纯前端如何实现批量dom转图片,并下载成压缩包
【10月更文挑战第2天】吐血整理:纯前端如何实现批量dom转图片,并下载成压缩包
91 2
|
5月前
|
前端开发
前端之图片操作
前端之图片操作
|
5月前
|
前端开发 Windows
【前端web入门第一天】02 HTML图片标签 超链接标签 音频标签 视频标签
本文档详细介绍了HTML中的图片、超链接、音频和视频标签的使用方法。首先讲解了`&lt;img&gt;`标签的基本用法及其属性,包括如何使用相对路径和绝对路径。接着介绍了`&lt;a&gt;`标签,用于创建超链接,并展示了如何设置目标页面打开方式。最后,文档还涵盖了如何在网页中嵌入音频和视频文件,包括简化写法及常用属性。
85 13
|
5月前
|
前端开发 JavaScript
node接收前端上传的图片,单文件、多文件同name、多文件不同name
本文介绍了在Node.js中使用multer模块接收前端上传的图片,包括单文件上传、多文件上传(同name和不同name)以及任意类型文件上传的方法。
173 0

热门文章

最新文章

  • 1
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 2
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 3
    【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 4
    详解智能编码在前端研发的创新应用
  • 5
    巧用通义灵码,提升前端研发效率
  • 6
    智能编码在前端研发的创新应用
  • 7
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 8
    【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 9
    抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
  • 10
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
  • 1
    以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
    29
  • 2
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
    51
  • 3
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 4
    巧用通义灵码,提升前端研发效率
    93
  • 5
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    141
  • 6
    详解智能编码在前端研发的创新应用
    96
  • 7
    智能编码在前端研发的创新应用
    83
  • 8
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    37
  • 9
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    121
  • 10
    【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
    75