微信小程序:图像处理与预览

举报
yd_266875364 发表于 2024/07/25 14:24:34 2024/07/25
【摘要】 微信小程序中的图片基础图片资源存储:本地资源与网络资源的使用区别。image组件:基础用法与属性详解,如src、mode属性调整图片展示模式。 一、图片上传与压缩wx.chooseImage:选择图片的API使用示例。wx.compressImage:图片压缩的重要性与实现方法。代码示例:chooseAndCompressImage() { wx.chooseImage({ cou...

微信小程序中的图片基础

  • 图片资源存储:本地资源与网络资源的使用区别。
  • image组件:基础用法与属性详解,如srcmode属性调整图片展示模式。

一、图片上传与压缩

  • wx.chooseImage:选择图片的API使用示例。
  • wx.compressImage:图片压缩的重要性与实现方法。
  • 代码示例:
chooseAndCompressImage() {
  wx.chooseImage({
    count: 1, // 默认9
    sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
    sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
    success: (res) => {
      const tempFilePaths = res.tempFilePaths;
      wx.compressImage({
        src: tempFilePaths[0], // 图片路径
        quality: 80, // 压缩质量
        success: (res) => {
          console.log('图片压缩成功', res.tempFilePath);
          this.uploadImage(res.tempFilePath); // 压缩后上传
        },
        fail: (err) => {
          console.error('图片压缩失败', err);
        }
      });
    },
    fail: (err) => {
      console.error('选择图片失败', err);
    }
  });
}

二、图片预览技巧

  • wx.previewImage:基础预览功能介绍与API参数说明。
  • 自定义预览界面:使用<image>配合bindtap实现简易预览功能。
  • 高级预览技巧:结合swiper组件实现轮播预览、手势缩放等。
  • 代码示例:
<!-- 在wxml中 -->
<view wx:for="{{imageUrls}}" wx:key="*this">
  <image src="{{item}}" bindtap="previewImage" mode="aspectFit"/>
</view>

<!-- 在js中 -->
previewImage(e) {
  const current = e.currentTarget.dataset.src;
  wx.previewImage({
    urls: this.imageUrls, // 需要预览的图片http链接列表
    current, // 当前显示图片的http链接
  });
}

三、图片处理进阶:Canvas与滤镜

  • Canvas API:绘制、裁剪、合成图片的基础与示例。
  • 滤镜应用:使用style.filter实现简单图片效果。
  • 代码示例:使用Canvas裁剪圆形头像
drawCircleAvatar() {
  const ctx = wx.createCanvasContext('myCanvas');
  ctx.beginPath();
  ctx.arc(50, 50, 50, 0, Math.PI * 2, true);
  ctx.clip();
  ctx.drawImage(this.data.avatarUrl, 0, 0, 100, 100);
  ctx.draw();
}

四、性能优化与最佳实践

  • 懒加载:结合Intersection Observer API或scroll-view的bindscroll事件实现。
  • 图片缓存策略:使用wx.getImageInfo缓存策略减少请求。
  • 适配多种屏幕尺寸:利用rpx单位与image组件的mode属性。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。