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