uni-app关于相片清晰度的问题

发布于 1周前 作者 bupafengyu 来自 Uni-App

uni-app关于相片清晰度的问题

现在项目需要做一个人脸识别功能,现在前端部分就一个上传图片!希望再前端能够对上传的图片进行处理,照片清晰就上传,如果不清晰就需要重新上传。有这样的插件吗??

信息类型 信息内容
开发环境
版本号
项目创建
1 回复

在处理uni-app中关于相片清晰度的问题时,通常涉及到图片的拍摄、选择、压缩以及显示等多个环节。下面是一些关键代码片段,展示了如何在uni-app中处理图片的清晰度问题。

1. 拍照或选择图片

首先,我们需要允许用户拍照或从相册中选择图片。这可以通过uni-app提供的chooseImagegetImageInfo API来实现。

uni.chooseImage({
    count: 1, // 默认9
    sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
    sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
    success: function (res) {
        const tempFilePaths = res.tempFilePaths;
        // tempFilePaths为选定照片的本地文件路径列表
        console.log('选定照片的本地文件路径列表:', tempFilePaths);
    }
});

2. 图片压缩(可选)

如果选择了压缩图,或者需要进一步压缩图片以减小文件大小,可以使用canvas进行压缩。

function compressImage(filePath, outputWidth, outputHeight) {
    return new Promise((resolve, reject) => {
        uni.getImageInfo({
            src: filePath,
            success: function (res) {
                const ctx = uni.createCanvasContext('myCanvas');
                const canvasId = 'myCanvas';
                
                const { width, height } = res;
                const ratio = Math.min(outputWidth / width, outputHeight / height);
                const newWidth = width * ratio;
                const newHeight = height * ratio;
                
                ctx.drawImage(filePath, 0, 0, newWidth, newHeight);
                ctx.draw(false, () => {
                    uni.canvasToTempFilePath({
                        canvasId,
                        destWidth: outputWidth,
                        destHeight: outputHeight,
                        quality: 0.8, // 质量,范围 0~1(仅对jpg有效)
                        success: function (result) {
                            resolve(result.tempFilePath);
                        },
                        fail: reject
                    });
                });
            },
            fail: reject
        });
    });
}

3. 显示图片

最后,将处理后的图片路径绑定到页面上显示。

<template>
    <view>
        <canvas canvas-id="myCanvas" style="width: 300px; height: 300px;"></canvas>
        <image :src="compressedImagePath" style="width: 300px; height: 300px;"></image>
    </view>
</template>

<script>
export default {
    data() {
        return {
            compressedImagePath: ''
        };
    },
    methods: {
        async handleImage() {
            try {
                const filePath = await this.chooseImage(); // 假设chooseImage返回了图片路径
                this.compressedImagePath = await compressImage(filePath, 300, 300);
            } catch (error) {
                console.error('处理图片失败:', error);
            }
        }
    }
};
</script>

以上代码展示了如何在uni-app中处理图片的清晰度问题,包括选择图片、压缩图片以及显示图片。

回到顶部