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

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
  • 2
    前端工程化演进之路:从手工作坊到AI驱动的智能化开发
  • 3
    Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式