使用小程序开发实现图片滤镜效果

D
dashen69 2022-09-18T19:53:04+08:00
0 0 207

引言

在今天的互联网时代,移动应用开发已经变得非常热门。而小程序作为一种轻量级的移动应用,具有跨平台、体积小、开发简单等诸多优势。本文将介绍如何使用小程序开发实现图片滤镜效果,为你的图片添加艺术感。

开发环境准备

在开始之前,确保你已经安装好以下开发环境:

创建项目

打开微信开发者工具,点击新建项目,填入项目名称和目录,然后选择小程序模板。在创建的过程中,你可以选择使用云开发能力,这样你可以更方便地操作数据。

代码编写

添加主页面

在项目的根目录下,找到app.json文件,将其中的pages属性更改为如下内容:

"pages": [
  "pages/index/index"
]

然后在项目目录下创建pages文件夹,并在其中创建index文件夹和index.js、index.wxml、index.wxss文件。

打开index.js文件,添加以下代码:

Page({
  data: {
    imageUrl: '',
    filteredImageUrl: '',
    filterIndex: 0,
    filters: [
      { name: '原图', value: '' },
      { name: '模糊', value: 'blur(4px)' },
      { name: '灰度', value: 'gray' },
      { name: '反转', value: 'invert' },
      // 可以继续添加更多滤镜效果
    ]
  },
  onLoad: function () {

  },
  chooseImage: function () {
    const that = this
    wx.chooseImage({
      count: 1,
      success: function (res) {
        const tempFilePaths = res.tempFilePaths
        that.setData({
          imageUrl: tempFilePaths[0]
        })
      }
    })
  },
  applyFilter: function () {
    const that = this
    const filter = that.data.filters[that.data.filterIndex].value
    wx.showLoading({
      title: '应用中...',
    })
    wx.getImageInfo({
      src: that.data.imageUrl,
      success(res) {
        const ctx = wx.createCanvasContext('imageCanvas')
        ctx.drawImage(that.data.imageUrl, 0, 0, res.width, res.height)
        ctx.filter = filter
        ctx.draw(false, function () {
          wx.canvasToTempFilePath({
            canvasId: 'imageCanvas',
            success(res) {
              wx.hideLoading()
              that.setData({
                filteredImageUrl: res.tempFilePath
              })
            }
          })
        })
      }
    })
  },
  changeFilter: function (e) {
    const filterIndex = e.detail.value
    this.setData({
      filterIndex
    })
  }
})

打开index.wxml文件,添加以下代码:

<view class='container'>
  <view class='header'>
    <view class='title'>图片滤镜</view>
    <button class='choose-btn' bindtap='chooseImage'>选择图片</button>
    <picker bindchange='changeFilter' value="{{filterIndex}}" range="{{filters}}">
      <view class='filter'>
        {{filters[filterIndex].name}}
      </view>
    </picker>
    <button class='apply-btn' bindtap='applyFilter'>应用滤镜</button>
  </view>
  <view class='content'>
    <image class='original' src="{{imageUrl}}" mode='aspectFit'></image>
    <image class='filtered' src="{{filteredImageUrl}}" mode='aspectFit'></image>
    <canvas hidden id='imageCanvas'></canvas>
  </view>
</view>

打开index.wxss文件,添加以下代码:

.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 100vh;
}

.header {
  display: flex;
  flex-direction: column;
  align-items: center;
  margin-bottom: 24rpx;
}

.title {
  font-size: 18rpx;
  font-weight: bold;
  margin-bottom: 8rpx;
}

.choose-btn,
.apply-btn {
  width: 200rpx;
  height: 40rpx;
  border-radius: 20rpx;
  font-size: 14rpx;
  color: #FFFFFF;
  background-color: #3299FF;
  margin-bottom: 8rpx;
}

.filter {
  font-size: 14rpx;
  color: #333333;
}

.content {
  display: flex;
  justify-content: space-around;
}

.original,
.filtered {
  width: 300rpx;
  height: 300rpx;
  border: 1rpx solid #999999;
}

预览效果

点击微信开发者工具的编译按钮,然后预览效果。

总结

通过本篇博客,我们学习了如何使用小程序开发实现图片滤镜效果。你可以根据自己的需求,添加更多的滤镜效果。小程序开发简单易上手,是一个非常适合开发轻量级移动应用的框架。希望这篇博客对你有所帮助,谢谢阅读!

相似文章

    评论 (0)