123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- import {
- getLoraList,
- createAiImg,
- getTaskResult,
- } from '~/api/avatar'
- import {
- userEvent
- } from '~/api/global'
- Page({
- data: {
- templates: [],
- loading: false,
- active: '',
- artistic: '',
- original: ''
- },
- onLoad() {
- getLoraList().then(res => {
- this.setData({
- templates: res.loras,
- active: res.loras[0] ? res.loras[0].lora_id : ''
- })
- })
- userEvent({
- action: 'AI_LOGIN'
- })
- },
- async selectTemplate({
- currentTarget
- }) {
- if (this.data.loading) {
- return
- }
- this.setData({
- active: currentTarget.dataset.id
- })
- if (this.data.original) {
- this.createAiImg()
- }
- await userEvent({
- action: "AI_STYLE",
- targetContent: currentTarget.dataset.name
- })
- },
- uploadImg() {
- if (this.data.loading) {
- return
- }
- wx.chooseMedia({
- count: 1,
- mediaType: ['image'],
- sizeType: ['compressed'], // original 原图;compressed 压缩图
- sourceType: ['album', 'camera'],
- camera: 'back',
- success: (res) => {
- this.cropper = this.selectComponent("#cropper");
- this.cropper.init({
- imgPath: res.tempFiles[0].tempFilePath, //imgPath是需要裁剪图片的图片路径,只支持本地或临时路径
- success: (imgUrl) => {
- wx.getFileSystemManager().readFile({
- filePath: imgUrl,
- encoding: "base64",
- success: res => {
- //返回base64格式
- var base64Str = 'data:image/png' + ';base64,' + res.data
- this.setData({
- artistic: base64Str,
- original: base64Str
- })
- this.createAiImg()
- userEvent({
- action: "AI_PHOTO"
- })
- },
- fail: err => {
- console.log(err)
- }
- })
- },
- fail(error) {
- console.log(error) //有两种:cancel代表点击了叉,fail代表wx.canvasToTempFilePath生成图片失败
- }
- });
- }
- })
- },
- createAiImg() {
- if (!this.data.original || this.data.loading) {
- return
- }
- this.setData({
- loading: true
- })
- createAiImg({
- "width": 512, //生成图片宽度
- "height": 512, //生成图片高度
- "n_samples": 1, //生成图片数量
- "controlnet_input_image_base64": this.data.original, //控制图片base64编码
- "style_id": this.data.active //控制风格id
- }).then(res => {
- this.getAiImg(res.uuid)
- }).catch(() => {
- this.setData({
- loading: false
- })
- wx.showToast({
- title: '网络异常请重试',
- icon: 'none',
- duration: 2500
- })
- })
- },
- async getAiImg(uuid) {
- let res = await getTaskResult({
- uuid
- })
- if (res.data.status != 2) {
- setTimeout(() => {
- this.getAiImg(uuid)
- }, 2500)
- } else {
- this.setData({
- loading: false,
- artistic: res.data.generated_imgs[0]
- })
- }
- },
- downloadImg() {
- wx.getSetting({
- success: (res) => {
- if (res.authSetting['scope.writePhotosAlbum']) {
- this.base64ToImg()
- } else {
- wx.authorize({
- scope: 'scope.writePhotosAlbum',
- success: () => {
- this.base64ToImg()
- },
- fail(res) {
- wx.showModal({
- title: '无法保存到相册',
- content: '点击右上角浮点按钮->设置,进行授权',
- confirmText: '我知道了',
- showCancel: false,
- })
- }
- })
- }
- }
- })
- },
- base64ToImg() {
- const base64 = this.data.artistic; //base64格式图片
- if (!base64 || this.data.loading) {
- return
- }
- const time = new Date().getTime();
- const imgPath = wx.env.USER_DATA_PATH + "/poster" + time + "" + ".png";
- //如果图片字符串不含要清空的前缀,可以不执行下行代码.
- const imageData = base64.replace(/^data:image\/\w+;base64,/, "");
- const file = wx.getFileSystemManager();
- file.writeFileSync(imgPath, imageData, "base64");
- wx.saveImageToPhotosAlbum({
- filePath: imgPath,
- success: async (res) => {
- wx.showModal({
- title: '照片已保存至相册',
- content: '快去分享给小伙伴吧',
- confirmText: '我知道了',
- showCancel: false,
- })
- await userEvent({
- action: 'AI_SAVE'
- })
- }
- })
- },
- onShareAppMessage() {
- userEvent({
- action: 'AI_SHARE'
- })
- return {
- title: '玩转AI头像',
- path: '/pages/index/index',
- }
- }
- })
|