我是靠谱客的博主 忧伤便当,最近开发中收集的这篇文章主要介绍Uniapp上传图片的压缩问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

uniapp上传图片的时候前台压缩

下边是一个完整的页面代码:
测试下拉发现,图片内存小的话,压缩出来内存反而变大了,但是文件较大的情况下,压缩后就很小了。所以可以考虑通过判断源文件的大小来考虑是否压缩。此处全部压缩,已满足应用场景。写的比较乱,留给自己看。

<template>
	<view class="content">
		<view @tap="ChooseImage()">点击上传图片</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				title: 'Hello'
			}
		},
		onLoad() {

		},
		methods: {
			ChooseImage() {
				uni.chooseImage({
					count: 1,
					sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
					sourceType: ['album'], //从相册选择
					success: res => {
						const imgSize = res.tempFiles[0] && res.tempFiles[0].size ? res.tempFiles[0].size : 0;
						const imgName = res.tempFiles[0]&&res.tempFiles[0].name?res.tempFiles[0].name:'';
						console.log(imgSize)
						this.photoCompress(res.tempFiles[0], (base64Codes) => {
							var fl = this.dataURLtoFile(base64Codes,imgName)
							console.log(fl, "压缩后的文件")
						})
					}
				})
			},
			photoCompress(file, objDiv) {
				var ready = new FileReader();
				ready.readAsDataURL(file);
				const _this = this;
				ready.onload = function() {
					var fileResult = this.result;
					_this.canvasDataURL(fileResult, objDiv)
				}
			},
			canvasDataURL(path, callback) {
				var img = new Image();
				img.src = path;
				var objCompressed = {}
				img.onload = function() {
					var that = this;
					//默认压缩后图片规格
					var quality = 0.7;
					var w = that.width;
					var h = that.height;
					var scale = w / h;
					//实际要求
					w = objCompressed.width || w;
					h = objCompressed.height || (w / scale);
					//生成canvas
					var canvas = document.createElement('canvas');
					var ctx = canvas.getContext('2d');
					// 创建属性节点
					var anw = document.createAttribute("width");
					anw.nodeValue = w;
					var anh = document.createAttribute("height");
					anh.nodeValue = h;
					canvas.setAttributeNode(anw);
					canvas.setAttributeNode(anh);
					ctx.drawImage(that, 0, 0, w, h);

					var base64 = canvas.toDataURL('image/jpeg', quality);
					// 回调函数返回base64的值
					callback(base64);
				}
			},
			dataURLtoFile(dataurl,filename) {
			    var arr = dataurl.split(","),
			        mime = arr[0].match(/:(.*?);/)[1],
			        bstr = atob(arr[1]),
			        n = bstr.length,
			        u8arr = new Uint8Array(n);
			    while (n--) {
			        u8arr[n] = bstr.charCodeAt(n);
			    }
			    return new File([u8arr],filename,  { type: mime });
			}
		}
	}
</script>

<style>
	
</style>

原文路径:
https://www.cnblogs.com/Fourteen-Y/p/11646540.html

最后

以上就是忧伤便当为你收集整理的Uniapp上传图片的压缩问题的全部内容,希望文章能够帮你解决Uniapp上传图片的压缩问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部