跳转到内容

证件照裁剪

刀刀
0字
0分钟
2026/8/16

音果项目客户那边需要生成证书,证书生成个人证件照有宽高要求。因此 APP 这边需要对用户上传的图片做裁剪操作,上传成功后点击可预览,如下所示:

p9gyE26.png

chooseImage

UniApp 提供了图片选择的方法 uni.chooseImage() ,其中可设置选择的图片、压缩类型、拍摄或相册获取等等,官方文档指路:chooseImage

选择图片成功后触发成功回调函数,参数中可获取临时地址,用于调用接口上传图片。

根据官方文档描述,我们可以设置 crop 属性,做图像裁剪参数,设置后 sizeType 失效。

crop

参数说明

参数名类型必填说明
qualityNumber取值范围为 1-100,数值越小,质量越低(仅对 jpg 格式有效)。默认值为 80。
widthNumber裁剪的宽度,单位为 px,用于计算裁剪宽高比。
heightNumber裁剪的高度,单位为 px,用于计算裁剪宽高比。
resizeBoolean是否将 width 和 height 作为裁剪保存图片真实的像素值。默认值为 true。注:设置为 false 时在裁剪编辑界面显示图片的像素值,设置为 true 时不显示

本项目运用场景中证书图片的宽高固定为 123 * 169,因此设置相应的宽高后,resize 采用其默认值 true ,作为真实的像素值。

js
// 上传图片
const uploadImgFn = async () => {
  uni.chooseImage({
    count: 1, //最大可选择数量,默认9
    sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
    sourceType: ['album', 'camera'], //可以指定从相册选择还是手机拍照,默认二者都有
    crop: {
      quality: 100,
      width: 123,
      height: 169,
    },
    success: function (res) {
      const tempFilePaths = res.tempFilePaths
      // 上传文件
      uni.uploadFile({
        url: 上传图片接口路径,
        filePath: tempFilePaths[0],
        name: 'file',
        header: {
          'X-Access-Token': uni.getStorageSync('token'),
        },
        success: async (uploadFileRes) => {},
      })
    },
  })
}

实际效果

打包后在手机运行,最终效果如下所示:

p9g6WX8.jpg

预览

预览模块实现起来就相对简单了,只需要根据官方文档调用其 uni.previewImage() 方法,以数组的方式传入相对应的图片路径和其索引(由于只有这一张图片所以是 0)。

js
// 预览图片
const previewImgFn = () => {
  uni.previewImage({
    current: 0,
    urls: [src.value],
  })
}

贡献者

The avatar of contributor named as duyidao duyidao
The avatar of contributor named as 刀刀 刀刀

页面历史

刀刀博客累计访客 人;文档累计访问量共