h5 拍照后压缩图片上传 方法直接用

h5 压缩图片上传

拍照后拿到的是一个file对象, 由于一些手机的相机像素高 拍出的照片比较大需要压缩。 思路就是通过 将file对象 通过canvas 压缩 得到新的一个file 上传

<input
				ref="camera"
				class="cameraInput"
				type="file"
				name="file"
				accept="image/*"
				capture="camera"
				@change="uploadImg"
			/>

压缩方法

/**
 * 压缩图片
 * @param {file} 输入图片
 * @returns {Promise} resolved promise 返回压缩后的新图片
 */
const compressImage = (
	file: any,
	maxWidth: number,
	maxHeight: number,
	quality: number,
	callback: any
) => {
	// 创建FileReader读取图片
	const reader = new FileReader()
	reader.readAsDataURL(file)

	reader.onload = (event) => {
		const img = new Image()
		img.src = event.target.result // FileReader读取的结果

		img.onload = () => {
			// 创建一个Canvas对象,并绘制压缩后的图片
			const canvas = document.createElement('canvas')
			const ctx = canvas.getContext('2d')
			let width = img.width
			let height = img.height

			// 按比例调整尺寸
			if (width > maxWidth) {
				height *= maxWidth / width
				width = maxWidth
			}
			if (height > maxHeight) {
				width *= maxHeight / height
				height = maxHeight
			}

			canvas.width = width
			canvas.height = height
			ctx.drawImage(img, 0, 0, width, height)

			// 将Canvas转换回DataURL
			const dataUrl = canvas.toDataURL('image/jpeg', quality)

			// 将DataURL转换成Blob对象
			fetch(dataUrl)
				.then((res) => res.blob())
				.then((blob) => callback(blob)) // 调用回调函数,返回压缩后的Blob对象
		}
	}
}

使用

uploadFileAjax 是一个上传文件的方法 自己写就可以了

/**
 * @description: 上传文件
 * @return {*}
 */

const uploadImg = (e: any) => {
	// 这里可以做一些限制 比如 文件大小 文件类型等
	// ----------
	const oldFile = e.target.files[0]
	let file: any = ''
	//判断图片大小不超过1024k  压缩下图片
	const mb = oldFile.size / 1024 / 1024
	if (mb > 1) {
		// 压缩
		compressImage(oldFile, 800, 600, 0.7, (compressedBlob: any) => {
			// 使用compressedBlob,例如创建一个新的File对象
			file = new File([compressedBlob], oldFile.name, {
				type: oldFile.type,
				lastModified: Date.now()
			})

			// 处理compressedFile,例如上传
			uploadFileAjax(file)
		})
	} else {
		uploadFileAjax(oldFile)
	}
}

相关推荐

  1. h5 拍照压缩图片 方法直接

    2024-06-08 17:52:03       36 阅读
  2. uni-app H5图片压缩体积大小

    2024-06-08 17:52:03       32 阅读
  3. uniapp --- 实现图片压缩(兼容H5

    2024-06-08 17:52:03       38 阅读
  4. 图片&视频压缩的考察

    2024-06-08 17:52:03       60 阅读
  5. 对用户图片进行压缩

    2024-06-08 17:52:03       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 17:52:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 17:52:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 17:52:03       82 阅读
  4. Python语言-面向对象

    2024-06-08 17:52:03       91 阅读

热门阅读

  1. 系统与软件工程软件测试设计技术

    2024-06-08 17:52:03       32 阅读
  2. 图论第6天

    2024-06-08 17:52:03       28 阅读
  3. Decimal要从str转换以避免精度问题

    2024-06-08 17:52:03       30 阅读
  4. 005 CentOS 7.9 RabbitMQ安装及配置

    2024-06-08 17:52:03       45 阅读
  5. python使用appium设置会话时长

    2024-06-08 17:52:03       33 阅读
  6. Markdown入门语法笔记

    2024-06-08 17:52:03       32 阅读
  7. 排序---归并排序(简单优化前后比较)

    2024-06-08 17:52:03       29 阅读