微信小程序的图片色彩分析,窃取网络图片的主色调

news/2024/7/20 2:55:12 标签: 微信小程序, 小程序, 前端, html, 笔记
htmledit_views">

1、安装 Mini App Color Thief 包 

包括下载包,简单使用都有,之前写了,这里就不写了

网址:html" title=微信html" title=小程序>小程序>微信html" title=小程序>小程序的图片色彩分析,窃取主色调,调色板-CSDN博客

2、 问题和解决方案

  • 问题:由于我们的窃取图片的是需要画布的,我需要使用网络图片去用画布时,html" title=微信html" title=小程序>小程序>微信html" title=小程序>小程序会报错,最后发现,需要本地图片才行,用网络图片会出问题
  • 解决方案:我们使用wx.downloadFile去下载该图片,然后获取临时路径去使用画布和Mini App Color Thief 包 窃取图片颜色,防止图片重复下载的话,我们去用html" title=微信html" title=小程序>小程序>微信html" title=小程序>小程序中的另一个api,FileSystemManager.access(Object object)去判断临时文件是否存在

 3、配置downloadFile.js文件【放置在utils文件夹下】

export default (url, path = "") => {
  return new Promise((resolve, reject) => {
    const fs = wx.getFileSystemManager()
    // 判断文件/目录是否存在
    fs.access({
      path,
      success(res) {
        // 文件存在,复用
        console.log(res)
        resolve(path)
      },
      fail(res) {
        // 文件不存在或其他错误,下载为临时文件
        console.log(res)

        wx.downloadFile({
          url,
          success(res) {
            if (res.statusCode === 200) {
              resolve(res.tempFilePath)
              wx.setStorageSync('bgcUrl', res.tempFilePath)
            }
          },
          fail: (err) => {
            reject(err)
          }
        })
      }
    })
  })
}

4、获取图片临时路径,开始窃取

注意:wxml中需要放置

html"><canvas canvas-id="myCanvas" />
import downloadFile from '../../utils/downloadFile'

Page({
  data: {
    palette: "",

    // 用户信息
    userInfo: {},
  },

  // 判断是否有背景图片的缓存文件,没有就下载为临时文件,最后绘画出来
  async bgcDownload() {
    let bgcUrl = wx.getStorageSync('bgcUrl')
    let result = await downloadFile(this.data.userInfo.backgroundUrl, bgcUrl)
    console.log(result);

    const ctx = wx.createCanvasContext('myCanvas')
    ctx.drawImage(result, 0, 0, 100, 100);
    ctx.draw(false, () => {
      wx.canvasGetImageData({
        canvasId: "myCanvas",
        x: 0,
        y: 0,
        width: 100,
        height: 100,
        success: res => {
          let palette = colorThief(res.data).color().getHex();
          this.setData({ palette })
        }
      });
    })
  },
  onReady: function () {
    this.bgcDownload()
  },
})


http://www.niftyadmin.cn/n/5365550.html

相关文章

《Docker极简教程》--Docker基础--Docker的核心组件

一、Docker引擎 1.1 Docker引擎的组成和功能 Docker 引擎是 Docker 平台的核心组件&#xff0c;它负责容器的创建、管理和运行。Docker 引擎主要包括两个主要组件&#xff1a;Docker 守护程序&#xff08;Docker Daemon&#xff09;和 Docker 客户端&#xff08;Docker Clien…

Springboot 整合 Quartz(定时任务框架)

一、java 定时任务调度的实现方式 1、Timer 特点是&#xff1a;简单易用&#xff0c;但由于所有任务都是由同一个线程来调度&#xff0c;因此所有任务都是串行执行的&#xff0c;同一时间只能有一个任务在执行&#xff0c;前一个任务的延迟或异常都将会影响到之后的任务&#…

深度学习的进展:人工智能时代的里程碑

深度学习的进展&#xff1a;人工智能时代的里程碑 摘要 深度学习作为机器学习领域的重要分支&#xff0c;近年来取得了巨大的进展。本文将回顾深度学习的发展历程&#xff0c;探讨其在图像识别、自然语言处理和语音识别等领域的重要应用&#xff0c;并展望深度学习在人工智能…

SQL Server之DML触发器

一、如何创建一个触发器呢 触发器的定义语言如下&#xff1a; CREATE [ OR ALTER ] TRIGGER trigger_nameon {table_name | view_name}{for | After | Instead of }[ insert, update,delete ]assql_statement从这个定义语言我们可以知道如下信息&#xff1a; trigger_name&…

SpringBoot 登录检验JWT令牌 生成与校验

JWT官网 https://jwt.io/ 引入依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version> </dependency>设置过期时间 LocalDateTime localDateTime LocalDateTime.now().…

【Redis】整理

对于现代大型系统而言&#xff0c;缓存是一个绕不开的技术话题&#xff0c;一提到缓存我们很容易想到Redis。 Redis整理&#xff0c;供回顾参考

VCG 网格Catmull-Clark细分

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 Catmull-Clark细分是一种常用的三角网格细分方法,它可以生成更加平滑的曲面,并且能够保持曲面的特性,如曲率、拓扑结构等。这种细分方法由Edwin Catmull 和 Jim Clark 在1978年提出。 Catmull-Clark细分的基本思…

Linux下线程的部分接口的使用

注意这些接口都需要使用原生线程库pthread.h 1、Pthread_create 创建一个线程太简单了。我这里给创建一系列进程的方式&#xff0c;这里不使用自己定义的缓冲区的方式&#xff0c;是因为会出错误&#xff0c;创建好一个线程以后&#xff0c;他的缓冲区的因为cpu速度的问题会直…