【开源】【猫咪卡通变 - 小程序】拍摄猫咪或上传猫咪照片,使其转化为卡通猫咪.(且上传图片必须为猫咪)

news/2024/12/2 6:37:44/

【来源】https://juejin.cn/post/7028624704491487269

目录

  • 一 前言
  • 二 展示情况
    • 【上传检查】
    • 【整体流程】
  • 三 链接要点(API接口的准备工作)
  • 四 核心代码
    • 【识别猫照 · 云函数代码】
    • 【变卡通 · 云函数代码】
    • 【识别猫照 · js代码】
    • 【变卡通 · js代码】
  • 五 完整代码
    • 【`cat_change.wxml`代码】
    • 【`cat_change.css`代码】
    • 【`cat_change.js`代码】
    • 【`cat_change.json`代码】
  • 六 完整项目源码地址

一 前言

废话不多说,直接看吧!

涉及技术:微信小程序云开发

涉及API接口:百度云-图像增强、百度云-图像识别

二 展示情况

【上传检查】

上传检查.gif

【整体流程】

整体.gif

三 链接要点(API接口的准备工作)

涉及百度云的API接口,我们需要申请注册百度云。
调用API接口,需要用到百度云的access_tokenaccess_token又需要请求一个接口方可能获取到。(并且access_token有效时间是一个月)

流程(获取access_token官方实例):

注册后——》来到所需的产品服务页面——》创建应用——》管理应用

image.png
——》拿到请求access_token的参数client_idclient_secret
image.png
——》发送请求获取access_tokenhttps://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【百度云应用的AK】&client_secret=【百度云应用的SK】(只需要修改百度云应用的AK和SK改成应用里的对应API Key和Secret Key)
image.png
——》然后就可以查看对应的接口文档进行使用啦~
这里展示的是:动物识别
image.png

四 核心代码

微信小程序·云开发

【识别猫照 · 云函数代码】

checkAnimal文件夹下index.js 云函数代码

// 云函数入口文件
const cloud = require('wx-server-sdk')
var rp = require('request-promise')
cloud.init({env: cloud.DYNAMIC_CURRENT_ENV
})// 云函数入口函数
exports.main = async (event, context) => {let datas = event.datasdatas.access_token = '你的百度云access_token' // 这里需要添加return new Promise((resolve, reject) => {rp({url: 'https://aip.baidubce.com/rest/2.0/image-classify/v1/animal',method: "POST",json: true,form: event.datas,}, function (error, response, body) {console.log("响应" + body)resolve(body)if (!error && response.statusCode == 200) {try {} catch (e) {reject()}}})})
}

【变卡通 · 云函数代码】

catChange文件夹下index.js 云函数代码

// 云函数入口文件
const cloud = require('wx-server-sdk')
var rp = require('request-promise')
cloud.init({env: cloud.DYNAMIC_CURRENT_ENV
})
const DB = cloud.database()// 云函数入口函数
exports.main = async (event, context) => {let datas = event.datasdatas.access_token = '你的百度云access_token' // 这里需要添加return new Promise((resolve, reject) => {rp({url: 'https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime',method: "POST",json: true,form: event.datas,}, function (error, response, body) {console.log("响应" + body)resolve(body)if (!error && response.statusCode == 200) {try {} catch (e) {reject()}}})})
}

页面的js代码

【识别猫照 · js代码】

    // 检查图片是不是动物,再判断是否为猫咪// baseImg传的是base64格式,并且前面是没有'data:image/png;base64'wx.cloud.callFunction({name: 'checkAnimal',data: {datas: {image: baseImg,}}}).then(res => {console.log(res)var checkName = res.result.result[0].nameconsole.log(checkName.indexOf("猫"))if (!checkName || checkName.indexOf("猫") == -1) {wx.showToast({title: '请添加有猫咪的照片!',icon: 'none'})} else {that.setData({image,baseImg})}// that.setData({//   image: 'data:image/png;base64,' + res.result.image,//   baseImg: res.result.image,// }) }).catch(err => {}).finally(() => {})

【变卡通 · js代码】

    // baseImg传的是base64格式,并且前面是没有'data:image/png;base64'wx.cloud.callFunction({name: 'catChange',data: {datas: {image: that.data.baseImg,}}}).then(res => {console.log(res)that.setData({image: 'data:image/png;base64,' + res.result.image,baseImg: res.result.image,})}).catch(err => {}).finally(() => {})

五 完整代码

cat_change.wxml代码】

<view style='width:0;height:0;overflow:hidden;' wx:if="{{cut}}"><canvas class='image-canvas' canvas-id="shareImg" wx:if="{{cut}}"></canvas>
</view>
<view><view class='head'><view>点击加号上传图片</view></view><view class='image-box'><view class='image' style="border: 20px solid white;"><image class='image' src='{{image}}'></image></view></view><view style='position:absolute;top: 59%;width:100%;text-align: center;'><textstyle="font-size: 24rpx;color: rgb(90, 90, 90);" space="emsp">滑动看看更多小猫咪↔</text></view><view id="kuang" class='image-kuang' bindtap='chooseImage'><image class='image' src='{{image1}}'></image></view><scroll-view scroll-x class='top' scroll-with-animation='true' bindscroll='scroll'><view id='-1' class='pic-box' bindtap='chooseKuang'><!-- 这里图片需要换 --><image class='pic'src='cloud://develop-3gb3s6m1d5806159.6465-develop-3gb3s6m1d5806159-1304559061/images/tool/cat_change/add.png'></image></view></scroll-view><view class="bottom"><button type='primary' bindtap='changePic' class=''>猫咪卡通变</button><button type='primary' bindtap='savePic' class=''>保存小猫</button></view>
</view>

cat_change.css代码】

page {background: #e5e5e5;
}.image-canvas {position: absolute;/*启用绝对定位*/top: 100%;width: 1000px;height: 1000px;
}page,
.cropper-wrapper {width: 100%;height: 100%;
}.head {width: 750rpx;height: 250rpx;display: flex;justify-content: center;/*垂直居中*/align-items: center;/*水平居中*/font-size: 28rpx;color: rgb(90, 90, 90);flex-direction: column;/*纵向排布*/
}.top {height: 200rpx;white-space: nowrap;display: flex;position: absolute;/*启用绝对定位*/top: 65%;
}.pic-box {border: 5rpx solid white;width: 150rpx;height: 150rpx;display: inline-block;margin: 0.1rem;/* padding-left: 0.3125rem; */
}.pic-white {display: inline-block;width: 125rpx;
}.pic {height: 100%;width: 100%;
}.image-box {position: absolute;/*启用绝对定位*/top: 15%;width: 750rpx;height: 500rpx;display: flex;justify-content: center;/*垂直居中*/align-items: center;/*水平居中*/
}.image-kuang {position: absolute;/*启用绝对定位*/top: 15%;width: 750rpx;height: 500rpx;display: flex;z-index: 100;justify-content: center;/*垂直居中*/align-items: center;/*水平居中*/
}.image {width: 500rpx;height: 500rpx;
}.bottom {display: flex;position: fixed;top: 82%;width: 100%;color: rgb(90, 90, 90);font-size: 24rpx;justify-content: center;/*垂直居中*/align-items: center;/*水平居中*/
}

cat_change.js代码】

Page({data: {image1: '',baseImg: '', // base64没有data:image/jpg;base64,image: 'cloud://develop-3gb3s6m1d5806159.6465-develop-3gb3s6m1d5806159-1304559061/images/tool/cat_change/add.png', // 这里图片需要换},chooseImage() {var that = this;wx.showActionSheet({itemList: ['从相册中选择', '拍照'],itemColor: "#FAD143",success: function (res) {if (!res.cancel) {wx.showLoading({title: '正在读取...',})// wx.showToast({//   title: '正在读取...',//   icon: 'loading'// })if (res.tapIndex == 0) {that.chooseWxImage1('album', 1)} else if (res.tapIndex == 1) {that.chooseWxImage1('camera', 1)}}}})},chooseWxImage1(type, imglng) {var that = this;console.log(imglng)wx.chooseImage({count: imglng, // 最大图片数量sizeType: ['original'], // ['original', 'compressed'], // compressed : 压缩图sourceType: [type],success: function (res) {// that.setData({//   image: res.tempFilePaths// })//以下为图片路径转base64位//图片base64位wx.getFileSystemManager().readFile({filePath: res.tempFilePaths[0], //选择图片返回的相对路径encoding: 'base64', //编码格式success: (res) => {wx.showLoading({title: '正在检查图片...',})let baseImg = res.datalet image = 'data:image/png;base64,' + res.data// console.log(baseImg)// 检查图片是不是动物,再判断是否为猫咪wx.cloud.callFunction({name: 'checkAnimal',data: {datas: {image: baseImg,}}}).then(res => {console.log(res)var checkName = res.result.result[0].nameconsole.log(checkName.indexOf("猫"))if (!checkName || checkName.indexOf("猫") == -1) {wx.showToast({title: '请添加有猫咪的照片!',icon: 'none'})} else {that.setData({image,baseImg})}// that.setData({//   image: 'data:image/png;base64,' + res.result.image,//   baseImg: res.result.image,// }) }).catch(err => {}).finally(() => {wx.hideLoading()})}})// } catch (err) {//   console.log(err)// }console.log(res.tempFilePaths[0])}})wx.hideLoading()},/*** 变卡通*/changePic: function (e) {let that = thisvar baseImg = that.data.baseImgif (baseImg.length < 8) {wx.showToast({title: '请先添加小猫照片噢~',icon: 'none'})return}wx.showLoading({title: '正在变身...',})wx.cloud.callFunction({name: 'catChange',data: {datas: {image: that.data.baseImg,}}}).then(res => {console.log(res)that.setData({image: 'data:image/png;base64,' + res.result.image,baseImg: res.result.image,})}).catch(err => {}).finally(() => {wx.hideLoading()})},savePic(e) {let that = thisvar baseImg = that.data.baseImgif (baseImg.length < 8) {wx.showToast({title: '请先生成卡通猫咪~',icon: 'none'})return}//保存图片var save = wx.getFileSystemManager();var number = Math.random();save.writeFile({filePath: wx.env.USER_DATA_PATH + '/pic' + number + '.png',data: baseImg,encoding: 'base64',success: res => {wx.saveImageToPhotosAlbum({filePath: wx.env.USER_DATA_PATH + '/pic' + number + '.png',success: function (res) {wx.showToast({title: '保存成功',})},fail: function (err) {console.log(err)}})console.log(res)},fail: err => {console.log(err)}})},/*** 页面接受参数 */onLoad: function (options) {},
})

cat_change.json代码】

{"navigationBarTitleText": "猫咪卡通变","navigationBarBackgroundColor": "#ffffff","navigationBarTextStyle": "black","backgroundColor": "#eeeeee","backgroundTextStyle": "light","enablePullDownRefresh":false
}

六 完整项目源码地址

gitee地址:https://gitee.com/nanfangzhe/wechat_demo

我是程序员南方者,谢谢你的观看~


http://www.ppmy.cn/news/471398.html

相关文章

【python】采集可爱猫咪数据并作可视化

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ! 环境介绍&#xff1a; python 3.6 pycharm 爬虫部分使用模块&#xff1a; csv requests >>> pip install requests parsel 如何安装python第三方模块: win R 输入 cmd 点击确定, 输入安装命令 pip install 模…

我以为猫咪牙齿断了一点不要紧,结果…

最近&#xff0c;跟几位猫友聊起猫咪的牙齿问题。 有人说&#xff0c;家里的崽不知怎么把自己的牙搞断了&#xff0c;看起来倒不太严重&#xff0c;就是牙齿尖缺了一小块&#x1f447; 啧啧&#xff0c;虽然看上去好像不是什么大问题&#xff0c;但****有的猫咪会因此而被迫拔…

什么猫猫最受欢迎?Python采集猫咪交易数据

前言 在日常生活中&#xff0c;我们看到可爱的猫咪表情包&#xff0c;总是会忍不住收藏 认识的一些朋友也养了猫&#xff0c;比如橘猫、英短、加菲猫之类的 看他们发朋友圈撸猫&#xff0c;老羡慕了&#xff0c;猫咪真的太可爱啦。 你是不是也动过养猫猫的小心思呢~反正我是动…

猫狗分类,猫狗大战

项目全部代码在文章末尾 1、任务描述 Cats vs. Dogs&#xff08;猫狗大战&#xff09;数据集下载地址为https://www.kaggle.com/c/dogs-vs-cats/data。这个数据集是Kaggle大数据竞赛某一年的一道赛题&#xff0c;利用给定的数据集&#xff0c;用算法实现猫和狗的识别。 其中包…

猫的平均寿命约为15年,全球最长寿的猫在英国,活了38年

猫是家庭宠物中最受欢迎的动物之一&#xff0c;它们不仅可爱、温顺&#xff0c;还拥有多种优秀的特征和能力。以下是一些有趣的猫的数据&#xff0c;咱通过数据图表一一分享&#xff1a; 全球猫的数量&#xff1a; 全球有超过5亿只宠物猫&#xff0c;它是很受人们欢迎的动物。…

东北猫咪带我躺平末世

丧尸来袭时,我趴在床上,啃着鸭脖哈着啤酒,看着我那黑心妹妹和渣男前男友为了一个长毛的面包互殴。 没办法,谁让末日之前我捡了一只有钱、会说话还是重生而来的大白猫呢。 看着别人从丧尸底下虎口夺食,而我躺在五百平的大房子里混吃等死,我忍不住捏了捏猫毛乎乎的小耳朵…

Maven的简单介绍

一、Maven的简介 1.Maven是什么 ①Maven的本质是一个项目管理工具&#xff0c;将项目开发和管理过程抽象成一个项目对象模型(POM) ②POM(Project Object Model):项目对象模型 2.Maven的作用 ①项目构建&#xff1a;提供标准的、跨平台的自动化项目构建方式 ②依赖管理&…

消息队列及常见消息队列介绍

一、消息队列(MQ)概述 消息队列&#xff08;Message Queue&#xff09;&#xff0c;是分布式系统中重要的组件&#xff0c;其通用的使用场景可以简单地描述为&#xff1a; 当不需要立即获得结果&#xff0c;但是并发量又需要进行控制的时候&#xff0c;差不多就是需要使用消息队…