将图片路径转成Base64(结合uni-app中uni.chooseImage方法)

本文介绍如何在uni-app项目中将图片路径转换为Base64格式,以便于图片的上传和处理。主要涉及uni.chooseImage方法的使用,以及image-tools插件中的pathToBase64函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


需求

在uni-app项目开发中,需要将图片转成base64格式传递给后端

一、uni-app是什么?

uni-app实现了一套代码,同时运行到多个平台,例如:iOS模拟器、Android模拟器、H5、微信开发者工具等等;
想了解更多网址:https://uniapp.dcloud.io/README

二、图片路径转成base64

1.引入插件

将下载好的插件引入到自己的项目中;
这个插件中有个两种方法:
一、pathToBase64()图像路径转换为base64
二、base64ToPath()图像base64保存为文件
插件地址:https://ext.dcloud.net.cn/plugin?id=123

代码如下(示例):

import {pathToBase64,base64ToPath} from '../../image-tools/index.js'

2.调用uni.chooseImage方法

通过uni.chooseImage方法获取到用户需要上传的图片路径,再将图像路径转换为base64。
uni.chooseImage方法详见:https://uniapp.dcloud.io/api/media/image?id=chooseimage
代码如下(示例):

const imageList: [],//存储图片路径用于图片展示
const baseImageList:[],//存储图片base64,用于上传后端
uni.chooseImage({
		count: 6, //最多可以选择的图片张数
		sizeType: ['compressed'], //original 原图,compressed 压缩图
		sourceType: ['album','camera'], //album 从相册选图,camera 使用相机
		//成功则返回图片的本地文件路径列表 tempFilePaths
		success:(res) => { 
			this.imageList = this.imageList.concat(res.tempFilePaths);//成功后利用concat方法追加到imageList中
			//循环遍历res.tempFilePaths将每一个图像路径转换为base64
			for(var i=0;i<res.tempFilePaths.length;i++){
				pathToBase64(res.tempFilePaths[i])
				.then(path => {
				    this.baseImageList = this.baseImageList.concat(path);//成功后利用concat方法追加到baseImageList中
				  })
				  .catch(error => {
				    console.error(error)
				  })
			}
		}
	})

效果图如下:
图片路径转成Base64示例

3.删除图片的方法

<view class="uni-uploader-body">
	<view class="uni-uploader__files">
		<block v-for="(image,index) in imageList" :key="index">
			<view class="uni-uploader__file" style="position: relative;">
				<!-- 删除的图标以及删除的 delimage方法传递的参数 -->
				<uni-icons @click="delimage(image)" class="del" size="20" type="clear"></uni-icons>
				<image class="uni-uploader__img" :src="image" :data-src="image" @tap="previewImage"></image>
			</view>
			
		</block>
		<view v-show="imageList.length < 6" class="uni-uploader__input-box">
			<view class="uni-uploader__input" @tap="chooseImage"></view>
		</view>
	</view>
</view>
//script中代码
delimage(index){
	this.imageList.splice(index, 1);
	this.baseImageList.splice(index,1);
},

总结

主要是那个image-tools插件好用,为了找到个图像转base64花费了不少时间。
在我的项目中有头像上传,存在单张图片的情况而uni.chooseImage方法返回的结果是数组对象所以获取结果需要如下:
this.avatar =res.tempFilePaths[0];//关键是[0]

UniApp 的 `chooseImage` API 可以帮助你在 H5 应用中选择图片,但是原生处理图片压缩并转成 base64 格式通常是在客户端完成的。要在 UniApp 中限制图片大小到100KB以内,你可以使用 JavaScript 或者 UniApp 提供的一些内置或第三方库,比如 vant-weapp 的 image-preview 组件。 下面是一个简单的步骤概述: 1. 使用 `uni.chooseImage` 获取用户选择的图片: ```javascript uni.chooseImage({ count: 1, // 取消选择限制 sourceType: ['album', 'camera'], success: function(res) { let tempFiles = res.tempFiles; if (tempFiles.length > 0) { processImage(tempFiles[0]); } }, }); ``` 2. 定义 `processImage` 函数,对图片进行压缩: ```javascript function processImage(file) { uni.getImageInfo({ src: file.path, success: function(imgInfo) { const originalSize = imgInfo.size; // 获取原始图片大小 // 使用 uniapp-sdk-image-resizer 这样的库进行压缩 uni.imageCompress({ src: file.path, quality: 0.8, // 设置压缩质量,范围0-1 size: 100 * 1024, // 目标大小,单位是字节 destType: 'base64', success: function(compressedData) { // 压缩后的 base64 编码 const compressedBase64 = compressedData.result; // ...这里可以保存或发送压缩后的 base64 数据 }, fail: function(error) { console.error('压缩失败:', error); }, }); }, }); } ``` 请注意,实际效果可能因浏览器兼容性和图片本身的编码等因素略有差异。如果需要更精确的控制,你可能需要额外检查压缩后的文件大小是否达到目标。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静的小白菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值