uni-app 调用相机或相册图片并转为base64格式上传图片

这篇具有很好参考价值的文章主要介绍了uni-app 调用相机或相册图片并转为base64格式上传图片。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、调用相机或相册上传图片

uni.chooseImage({
  	count: 1, // 最多可以选择的图片张数
    sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
    sourceType: ['camera','album'], // camera调用相机拍照,album是打开手机相册
    success: (res)=> {
		console.log(JSON.stringify(res.tempFilePaths));
    }
})

2、图片文件转base64

(1)下载插件

npm i image-tools --save

(2)页面引入插件 文章来源地址https://www.toymoban.com/news/detail-511601.html

<template>
	<view class="container">
		<view class="upload">
			<view class="img-box" v-if="form.visitorPicture">
				<image :src="form.visitorPicture" @click="handlePreview" mode="aspectFill"></image>
				<uni-icons type="clear" class="clear" @click="form.visitorPicture = ''"></uni-icons>
			</view>
			<uni-icons type="plusempty" class="upload-box" @click="handleUpload" v-else></uni-icons>
		</view>
		<uni-icons type="right"></uni-icons>
	</view>
</template>

<script>
	import MyToast from './components/myToast.vue'
	export default {
		name: 'info',
		data() {
			return {
				form: {
					visitorPicture: ""
				}
			}
		},
		methods: {
			// 上传头像
			handleUpload() {
				uni.chooseImage({
					count: 1,
					sizeType: ['original', 'compressed'],
					sourceType: ['camera', 'album'],
					success: (res) => {
						uni.showLoading({
							title: '图片上传中'
						});
						if(res.tempFilePaths[0].split(".")[1] === "jpg" || res.tempFilePaths[0].split(".")[1] === "JPG") {
							if(res.tempFiles[0].size <= 10 * 1024 * 1024) {
								// 图片转为base64
								pathToBase64(res.tempFilePaths[0]).then(path => {
									this.getImageUrl(path);
								}).catch(error => {
									uni.hideLoading();
								})
							} else {
								uni.hideLoading();
								this.errorToast = "请上传小于10MB的图片";
								this.$refs.myToast.show();
							}
						} else {
							uni.hideLoading();
							this.errorToast = "请上传jpg格式的图片";
							this.$refs.myToast.show();
						}
					}
				});
			},
			// 获取上传到服务器图片的在线地址
			getImageUrl(path) {
				// todo 调用接口上传base64图片到后端
			},
			// 图片预览
			handlePreview() {
				uni.previewImage({
					current: 0,
					urls: [this.form.visitorPicture]
				})
			}
		}
	}
</script>

<style lang="less" scoped>
	.upload {
		width: 100rpx;
		height: 100rpx;
		position: relative;
		.upload-box {
			width: 100% !important;
			height: 100%;
			margin-left: 0 !important;
			justify-content: center;
			border: 2rpx #DDDDDD solid;
			border-radius: 4rpx;
			box-sizing: border-box;
			position: absolute;
			top: 0;
			left: 0;
			/deep/ .uniui-plusempty {
				width: 100%;
				height: 100%;
				line-height: 96rpx;
				text-align: center;
				font-size: 40rpx !important;
				color: #CCCCCC !important;
			}
		}
		.img-box {
			width: 100%;
			height: 100%;
			position: absolute;
			top: 0;
			left: 0;
			image {
				width: 100%;
				height: 100%;
				border-radius: 4rpx;
			}
			.clear {
				width: 32rpx;
				height: 32rpx;
				position: absolute;
				right: 0;
				top: 0;
				/deep/ .uniui-clear {
					color: #7F7F7F !important;
					font-size: 32rpx !important;
				}
			}
		}
	}
</style>

3、image-tools/index.js源码

function dataUrlToBase64(str) {
    var array = str.split(',')
    return array[array.length - 1]
}

var index = 0
function getNewFileId() {
    return Date.now() + String(index++)
}

function biggerThan(v1, v2) {
    var v1Array = v1.split('.')
    var v2Array = v2.split('.')
    var update = false
    for (var index = 0; index < v2Array.length; index++) {
        var diff = v1Array[index] - v2Array[index]
        if (diff !== 0) {
            update = diff > 0
            break
        }
    }
    return update
}

export function pathToBase64(path) {
    return new Promise(function(resolve, reject) {
        if (typeof window === 'object' && 'document' in window) {
            if (typeof FileReader === 'function') {
                var xhr = new XMLHttpRequest()
                xhr.open('GET', path, true)
                xhr.responseType = 'blob'
                xhr.onload = function() {
                    if (this.status === 200) {
                        let fileReader = new FileReader()
                        fileReader.onload = function(e) {
                            resolve(e.target.result)
                        }
                        fileReader.onerror = reject
                        fileReader.readAsDataURL(this.response)
                    }
                }
                xhr.onerror = reject
                xhr.send()
                return
            }
            var canvas = document.createElement('canvas')
            var c2x = canvas.getContext('2d')
            var img = new Image
            img.onload = function() {
                canvas.width = img.width
                canvas.height = img.height
                c2x.drawImage(img, 0, 0)
                resolve(canvas.toDataURL())
                canvas.height = canvas.width = 0
            }
            img.onerror = reject
            img.src = path
            return
        }
        if (typeof plus === 'object') {
            plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), function(entry) {
                entry.file(function(file) {
                    var fileReader = new plus.io.FileReader()
                    fileReader.onload = function(data) {
                        resolve(data.target.result)
                    }
                    fileReader.onerror = function(error) {
                        reject(error)
                    }
                    fileReader.readAsDataURL(file)
                }, function(error) {
                    reject(error)
                })
            }, function(error) {
                reject(error)
            })
            return
        }
        if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
            wx.getFileSystemManager().readFile({
                filePath: path,
                encoding: 'base64',
                success: function(res) {
                    resolve('data:image/png;base64,' + res.data)
                },
                fail: function(error) {
                    reject(error)
                }
            })
            return
        }
        reject(new Error('not support'))
    })
}

export function base64ToPath(base64) {
    return new Promise(function(resolve, reject) {
        if (typeof window === 'object' && 'document' in window) {
            base64 = base64.split(',')
            var type = base64[0].match(/:(.*?);/)[1]
            var str = atob(base64[1])
            var n = str.length
            var array = new Uint8Array(n)
            while (n--) {
                array[n] = str.charCodeAt(n)
            }
            return resolve((window.URL || window.webkitURL).createObjectURL(new Blob([array], { type: type })))
        }
        var extName = base64.split(',')[0].match(/data\:\S+\/(\S+);/)
        if (extName) {
            extName = extName[1]
        } else {
            reject(new Error('base64 error'))
        }
        var fileName = getNewFileId() + '.' + extName
        if (typeof plus === 'object') {
            var basePath = '_doc'
            var dirPath = 'uniapp_temp'
            var filePath = basePath + '/' + dirPath + '/' + fileName
            if (!biggerThan(plus.os.name === 'Android' ? '1.9.9.80627' : '1.9.9.80472', plus.runtime.innerVersion)) {
                plus.io.resolveLocalFileSystemURL(basePath, function(entry) {
                    entry.getDirectory(dirPath, {
                        create: true,
                        exclusive: false,
                    }, function(entry) {
                        entry.getFile(fileName, {
                            create: true,
                            exclusive: false,
                        }, function(entry) {
                            entry.createWriter(function(writer) {
                                writer.onwrite = function() {
                                    resolve(filePath)
                                }
                                writer.onerror = reject
                                writer.seek(0)
                                writer.writeAsBinary(dataUrlToBase64(base64))
                            }, reject)
                        }, reject)
                    }, reject)
                }, reject)
                return
            }
            var bitmap = new plus.nativeObj.Bitmap(fileName)
            bitmap.loadBase64Data(base64, function() {
                bitmap.save(filePath, {}, function() {
                    bitmap.clear()
                    resolve(filePath)
                }, function(error) {
                    bitmap.clear()
                    reject(error)
                })
            }, function(error) {
                bitmap.clear()
                reject(error)
            })
            return
        }
        if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
            var filePath = wx.env.USER_DATA_PATH + '/' + fileName
            wx.getFileSystemManager().writeFile({
                filePath: filePath,
                data: dataUrlToBase64(base64),
                encoding: 'base64',
                success: function() {
                    resolve(filePath)
                },
                fail: function(error) {
                    reject(error)
                }
            })
            return
        }
        reject(new Error('not support'))
    })
}

到了这里,关于uni-app 调用相机或相册图片并转为base64格式上传图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uni-app 支持 app端, h5端,微信小程序端 图片转换文件格式 和 base64

    uni-app 支持 app端 h5端,微信小程序端 图片转换文件格式 和 base64,下方是插件市场的地址 app端 h5端,微信小程序端 图片转换文件格式 和 base64 - DCloud 插件市场 https://ext.dcloud.net.cn/plugin?id=13926

    2024年02月13日
    浏览(68)
  • uni-app 经验分享,从入门到离职(实战篇)——模拟从后台获取图片路径数据后授权相册以及保存图片到本地(手机相册)

    这篇文章是本专栏 uni-app 的项目实战篇,主要内容的是模拟前端通过调用接口,然后获取到数据图片的路径数据,然后授权相册,最后把图片保存到本地(相册)。 本专栏主要是分享和介绍从零到一学习和使用的 uni-app 的笔记和个人经验。通过个人的学习经验和工作经验来给

    2024年02月08日
    浏览(62)
  • 【uni-app】后端返回base64转二维码并显示在canvas生成海报

    使用官方的 uni.getFileSystemManager().writeFile() 方法可将base64码转成的二维码显示在画布上,代码如下: const obj = {                     page: \\\'pages/sort/goodsDetail\\\',                     co_Nu: this.goodInfo.co_Nu                 }                 const _this = this       

    2024年02月11日
    浏览(63)
  • uni-app uni-file-picker文件上传实现拍摄从相册选择获取图片上传文档服务器(H5上传-微信小程序上传)

    前言 最近在使用uni-app写H5移动端,有一个从手机拍摄从相册选择获取图片上传到文档服务器功能。 查阅uni-app发现关于上传图片,uni-file-picker文件上传,uni.chooseImage,uni.uploadFile H5上传时它和pc端原理差不多,都是file对象上传,PC端是通过new file对象,uni-app是直接提供了 微信

    2024年02月15日
    浏览(95)
  • flutter base64图片保存到相册

    首先base64转成uint8List,然后再用插件保存到相册(没有内置的方法处理) 保存图片的插件 完整代码如下 为啥要用下面 因为’data:image/png;base64,’ is part of the data URL,不是base-64字符串的一部分。您需要首先从URL中提取base-64数据。 否则就会报错如下: 网站用图片转base64如下

    2024年02月01日
    浏览(41)
  • uni-app 微信小程序 支付宝小程序(alipay) 百度小程序(baidu),预览pdf(链接和base64) 及下载(仅微信),window.open uni.downloadFile

    废话不多说直接上代码吧 之前搜了一大堆有的没的,最终还是小伙伴巴拉文档一起找到的方案(离不开小伙伴的帮助,自己总容易陷入死局,在此鸣谢 疾风李青!); 想起个事:一定要给这些路径的域名配到相应的开发管理上,其他平台不过多赘述了 首先是预览,由于我这

    2024年02月15日
    浏览(62)
  • 【base64】JavaScript&uniapp 将图片转为base64并展示

    Base64是一种用于编码二进制数据的方法,它将二进制数据转换为文本字符串。它的主要目的是在网络传输或存储过程中,通过将二进制数据转换为可打印字符的形式进行传输  图片大小从1.36MB到169kb 上面的代码中,toDataURL产生的是图片的base64编码,Base64编码必须是完整且正确

    2024年02月11日
    浏览(46)
  • 【base64码转为图片,并预览】

    开发工具及需求介绍 (1)开发工具:HBuilder (2)数据库:SQLite (3)组件库:uni-app (4)需求:(后端)将图片信息加密,前端接收到的是一个base64码。前端需要利用这些信息,转成 image src=\\\"imageURL\\\"/image 中的imageURL,以便能显示出图片。后端返回的信息,我们必需要的是”图

    2024年02月05日
    浏览(51)
  • uni-app 获取android相册

    在uni-app中提供的封装好的api中没有提供获取手机相册的能力,只能打开相册后由用户选择其中的照片,而插件库中提供的获取相册的插件都是收费的,这里为大家分享一个可以自己获取android相册的代码段:

    2024年02月11日
    浏览(48)
  • 解决uni-app开发小程序时,CSS调用本地图片当背景时不能使用的问题

    uniapp官方给出的解释就是小程序不支持本地图片,只支持网络访问或者base64。 当背景图片小于40kb的时候还好,uniapp会自动转为base64格式;但是大于40kb时候就不行了,目前我了解的有三种方式解决: 1.可以通过动态样式“:style”来解决,在标签上如下编写: 接着在data里声明

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包