【base64】JavaScriptuniapp 将图片转为base64并展示

news2024/11/23 3:33:10

Base64是一种用于编码二进制数据的方法,它将二进制数据转换为文本字符串。它的主要目的是在网络传输或存储过程中,通过将二进制数据转换为可打印字符的形式进行传输

JavaScript

压缩图片

<html>

<body>
    <script src="https://code.jquery.com/jquery-1.11.3.js"></script>
    <input id="file" type="file" accept="image/*"><br>
    压缩后的图片:<span id="sz"></span><br>
    <img id="pic">
    <script>
        var base64, base64_2, base64_3;
        // 选择图片
        $("#file").change(function () {
            var m_this = this;
            cutImageBase64(m_this, 900, 0.7);
        })

        function cutImageBase64(m_this, wid, quality) {
            var file = m_this.files[0];
            // 获取当前浏览器的URL对象
            var URL = window.URL || window.webkitURL;
            // 该方法会返回一个代表文件的Blob URL。Blob URL是一个特殊的URL,可以用来临时表示二进制数据(比如文件、图像等)
            var blob = URL.createObjectURL(file);

            var img = new Image();
            img.src = blob;
            img.onload = function () {
                var that = this;
                //生成比例
                var w = that.width,
                    h = that.height,
                    scale = w / h;
                w = wid || w;
                h = w / scale;
                //生成canvas
                var canvas = document.createElement('canvas');
                var ctx = canvas.getContext('2d');
                $(canvas).attr({
                    width: w,
                    height: h
                });
                // 将指定的图像绘制到Canvas上
                // 参数依次表示图像源、起始点的X坐标、起始点的Y坐标、绘制的宽度和高度
                ctx.drawImage(that, 0, 0, w, h);
                // 将Canvas上的图像转换为Base64编码的数据
                // 参数依次表示图像类型、图像质量
                base64 = canvas.toDataURL('image/jpeg', quality || 0.9);
                document.getElementById("pic").src = base64;
                document.getElementById("sz").innerHTML = parseInt(base64.length / 2014, 0) + "kb";


            };
        }
    </script>
</body>

</html>

 图片大小从1.36MB到169kb

加密图片

上面的代码中,toDataURL产生的是图片的base64编码,Base64编码必须是完整且正确才能正常显示图片。而只需对此编码做小小修改,哪怕仅是改动一个字符,也会让图片无法正常显示

代码如下:

<html>

<body>
    <script src="https://code.jquery.com/jquery-1.11.3.js"></script>
    <input id="file" type="file" accept="image/*"><br>
    压缩后的图片:<span id="sz"></span><br>
    <img id="pic">
    <a onclick="jm()">点此解密并显示图片</a>
    <script>
        var base64, base64_2, base64_3;
        // 选择图片
        $("#file").change(function () {
            var m_this = this;
            cutImageBase64(m_this, 900, 0.7);
        })

        function jm() {
            var pass = prompt('请输入口令', '');
            if (pass != "123") {
                alert("口令错误。");
            }
            else {
                base64_2 = document.getElementById("pic").src.toString();
                //解密
                base64_3 = base64_2.substring(0, 26) + base64_2.substring(27, base64_2.length);
                document.getElementById("pic").src = base64_3;
                console.log(base64_3)
            }
        }

        function cutImageBase64(m_this, wid, quality) {
            var file = m_this.files[0];
            // 获取当前浏览器的URL对象
            var URL = window.URL || window.webkitURL;
            // 该方法会返回一个代表文件的Blob URL。Blob URL是一个特殊的URL,可以用来临时表示二进制数据(比如文件、图像等)
            var blob = URL.createObjectURL(file);

            var img = new Image();
            img.src = blob;
            img.onload = function () {
                var that = this;
                //生成比例
                var w = that.width,
                    h = that.height,
                    scale = w / h;
                w = wid || w;
                h = w / scale;
                //生成canvas
                var canvas = document.createElement('canvas');
                var ctx = canvas.getContext('2d');
                $(canvas).attr({
                    width: w,
                    height: h
                });
                // 将指定的图像绘制到Canvas上
                // 参数依次表示图像源、起始点的X坐标、起始点的Y坐标、绘制的宽度和高度
                ctx.drawImage(that, 0, 0, w, h);
                // 将Canvas上的图像转换为Base64编码的数据
                // 参数依次表示图像类型、图像质量
                base64 = canvas.toDataURL('image/jpeg', quality || 0.9);
                // document.getElementById("pic").src = base64;
                document.getElementById("pic").src = base64.substring(0, 26) + 'a' + base64.substring(26, base64.length);
                document.getElementById("sz").innerHTML = parseInt(base64.length / 2014, 0) + "kb";


            };
        }
    </script>
</body>

</html>

 

虽然图片编码经过了加密,而且增加了口令保护,但是只要查看网页源码,就可以知道口令,这样完全没有起到加密的效果

js代码加密

JS加密、JS混淆 - JShaman:专业JS代码混淆加密平台

直接将加密后的代码替换成以前的代码即可,如下:

uniapp 

 效果图:

 编码:

<template>
	<view class="container">
		<button @click="chooseImage">选择图片</button>
		<image v-if="base64Image" :src="base64Image"></image>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				base64Image: ''
			};
		},
		methods: {
			chooseImage() {
				let _this = this
				uni.chooseImage({
					count: 1,
					success(res) {
						const tempFilePath = res.tempFilePaths[0];
						uni.getFileSystemManager().readFile({
							filePath: tempFilePath,
							encoding: "base64",
							success(data) {
								console.log("图片的Base64数据:", data.data);
								_this.base64Image = "data:image/jpeg;base64," + data.data;
							},
							fail(error) {
								console.log("读取文件失败:", error);
							}
						});
					},
					fail(error) {
						console.log("选择图片失败:", error);
					}
				});
			}
		}
	}
</script>

<style>
	.container {
		margin: 20px;
	}
</style>

注解:

_this.base64Image = "data:image/jpeg;base64," + data.data表示什么?

this.base64Image是一个用于在视图中展示图片的数据绑定。通过给this.base64Image赋值一个以"data:image/jpeg;base64,"开头的字符串,然后将Base64编码的图片数据拼接在后面,就可以将这个Base64格式的图片数据作为URL来展示在页面上

uni.chooseImage?

从本地相册选择图片或使用相机拍照

文档:uni.chooseImage(OBJECT) | uni-app官网

uni.getFileSystemManager().readFile({})?

使用uni-app中FileSystemManager的readFile方法读取文件

文档:uni.getFileSystemManager() | uni-app官网

filePath(必填):要读取的文件路径,可以是相对路径或绝对路径。

encoding(可选):文件的编码格式,默认值为 'utf8'。如果需要将文件内容转换为 Base64 格式,则需要将该值设置为 'base64'。

success(可选):文件读取成功后的回调函数,接收一个参数表示读取到的文件数据。

fail(可选):文件读取失败时的回调函数,接收一个参数表示错误信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/938372.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python绘图系统10:在父组件中使用子组件的函数

文章目录 Combobox绑定事件互相调用源代码 Python绘图系统&#xff1a; &#x1f4c8;从0开始实现一个三维绘图系统自定义控件&#xff1a;坐标设置控件&#x1f4c9;坐标列表控件&#x1f4c9;支持多组数据的绘图系统图表类型和风格&#xff1a;散点图和条形图&#x1f4ca;混…

【2023】数字信号处理之Fourier分析

目录 一、基础概念 1. 时域 2. 频域 3. Fourier分析级数变换 Fourier级数 Fourier变换 离散谱 连续谱 4. 欧拉公式&#xff01;&#xff01;&#xff01; 欧拉恒等式 二 、三角函数系及Fourier级数 1. 三角函数系 概念 性质——周期性、正交性、完备性 Fourier系…

AI时代,程序员需要焦虑吗?

原文来自 微信公众号"互联网技术人进阶之路". 目录 前言一、程序员会被 AI 取代么&#xff1f;二、服务端开发尚难被 AI 取代三、服务端开发何去何从&#xff1f;四、业界首部体系化、全景式解读服务端开发的著作第一部分&#xff1a;服务端开发的技术和方法第二部分…

java基于SpringBoot+vue的宠物用品商城交易平台的设计与实现y704t

在此基础上&#xff0c;结合现有宠物用品交易体系的特点&#xff0c;运用新技术&#xff0c;构建了以 springboot为基础的宠物用品交易信息化管理体系。首先&#xff0c;以需求为依据&#xff0c;根据需求分析结果进行了系统的设计&#xff0c;并将其划分为管理员和用户二种角色…

MySQL索引 事物 存储引擎

一 索引 索引的概念 索引就是一种帮助系统能够更快速的查找信息的结构 索引的作用 索引的副作用 创建索引的规则 MySQL的优化 哪些字段/场景适合创建索引 哪些不适合 小字段唯一性强的字段更新不频繁&#xff0c;但查询率比较高的字段表记录超过 300行主键&#xff0c;外键…

基于硬件隔离增强risc-v调试安全1_问题描述

安全之安全(security)博客目录导读 2023 RISC-V中国峰会 安全相关议题汇总 说明&#xff1a;本文参考RISC-V 2023中国峰会如下议题&#xff0c;版权归原作者所有。

6个最受欢迎的3D点云查看工具【在线/离线】

推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 免费3D点云软件有点像寻找大脚怪… 性质神秘。 模糊的目击。 有些人甚至认为这是民间传说。 但令人惊讶的是&#xff0c;免费的3D点云软件确实存在。 与大脚野人不同的是&#xff0c;我们已经证明了它的存在。 本文将介…

【启扬方案】基于i.MX8M Mini 核心板的工业数据采集与控制系统解决方案

随着通信和网络技术的飞速发展以及互联网的普及&#xff0c;工业管理已经趋向数据化、网络化和智能化。在智慧工厂中&#xff0c;利用工业物联网实现工业数据采集和控制已经成为必不可少的一部分。 传统的工业数据采集和控制系统通常需要连接多个数据采集设备进行高速通信&…

入门vue——创建vue脚手架项目 以及 用tomcat和nginx分别部署vue项目(vue2)

入门vue——创建vue脚手架项目 以及 用tomcat和nginx分别部署vue项目&#xff08;vue2&#xff09; 1. 安装npm2. 安装 Vue CLI3. 创建 vue_demo1 项目&#xff08;官网&#xff09;3.1 创建 vue_demo1 项目3.1.1 创建项目3.1.2 解决 sudo 问题 3.2 查看创建的 vue_demo1 项目3…

美芯再失一大市场,国产车机芯片大突破,高通不再是唯一选择

日前知名评测软件给出的数据指出国内车机芯片市场&#xff0c;国产车机芯片已取得重大进展&#xff0c;性能方面已与车机芯片龙头高通的上一代接近&#xff0c;只有高通最新的车机芯片才取得领先优势&#xff0c;显示出国产芯片取得重大突破。 汽车芯片已是芯片行业的重要增长点…

备份迁移数据库

记录下备份迁移数据库的经历。 使用工具sqldump和mysql 1、sqldump导出数据 #导出整个数据库 sudo mysqldump -uroot -p123456 database > database.sql#导出数据库中某个表 sudo mysqldump -uroot -p123456 database table1 > database.sql#导出数据库中多个表 sudo …

【Unity3D赛车游戏】【六】如何在Unity中为汽车添加发动机和手动挡变速?

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

金铜转债上市价格预测

金铜转债 基本信息 转债名称&#xff1a;金铜转债&#xff0c;评级&#xff1a;AA&#xff0c;发行规模&#xff1a;14.5亿元。 正股名称&#xff1a;金田股份&#xff0c;今日收盘价&#xff1a;6.4元&#xff0c;转股价格&#xff1a;6.75元。 当前转股价值 转债面值 / 转股…

初步了解ES

一、ES基础查询 1、es基础查询 1.1 准备数据 # 准备数据 PUT test_index/_doc/1 {"name":"顾老二","age":30,"from": "gu","desc": "皮肤黑、武器长、性格直","tags": ["黑", &…

每日两题 110平衡二叉树 199二叉树的右视图

110 题目 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&a…

提升用户体验:Vue与compressor.js实现高效文件压缩

前言 上传文件是一个常见的需求&#xff0c;并且文件大小往往成为限制因素之一。为了提升用户体验和节省带宽消耗&#xff0c;上传时的文件压缩便显得格外重要。本文将介绍基于 Vue 框架和 compressor.js 的上传时文件压缩实现方法&#xff0c;通过在上传过程中对文件进行压缩&…

Linux常用命令——depmod命令

在线Linux命令查询工具 depmod 分析可载入模块的相依性 补充说明 depmod命令可产生模块依赖的映射文件&#xff0c;在构建嵌入式系统时&#xff0c;需要由这个命令来生成相应的文件&#xff0c;由modprobe使用。 语法 depmod(选项)选项 -a或--all&#xff1a;分析所有可…

Redis数据结构:Set类型全面解析

Set 类型是一个无序并唯一的键值集合&#xff0c;它的存储顺序不会按照插入的先后顺序进行存储。Redis 中集合是通过哈希表实现的&#xff0c;所以添加&#xff0c;删除&#xff0c;查找的复杂度都是 O(1)。相对于列表&#xff0c;集合也有两个特点&#xff1a;无序、不可重复 …

【内网穿透】搭建我的世界Java版服务器,公网远程联机

目录 前言 1. 搭建我的世界服务器 1.1 服务器安装java环境 1.2 配置服务端 2. 测试局域网联机 3. 公网远程联机 3.1 安装cpolar内网穿透 3.1.1 windows系统 3.1.2 linux系统&#xff08;支持一键自动安装脚本&#xff09; 3.2 创建隧道映射内网端口 3.3 测试公网远程…