colorThief+vite+react使用方法

 官网:

Color Thief

npm i --save colorthief

 第一种,import载入图片

经过尝试,在vite中,要引入.mjs版本
import ColorThief from 'colorthief/dist/color-thief.mjs'
第一种,通过import载入图片
import aa from '@/assets/123.jpg'


const [resultColor,setResultColor]=useState('')
useEffect(()=>{
    var colorthief = new ColorThief();
    var img = document.getElementById('tupian')
  if (img.complete) {
      var res = colorthief.getColor(img);
      console.log('======网速很快', res);
      setResultColor(res)
    } else {
      img.addEventListener('load', function () {
        var res = colorthief.getColor(img)
        console.log('======事件监听', res);
        setResultColor(res)
      });
    }
},[])



<img src={aa} id="tupian" />
<div style={
  { width: '100px', height: '100px', backgroundColor: `rgba(${resultColor})` }}></div>

第二种,new Image实例

经过尝试,在vite中,要引入.mjs版本
import ColorThief from 'colorthief/dist/color-thief.mjs'

import aa from '@/assets/123.jpg'


const [resultColor,setResultColor]=useState('')
useEffect(()=>{
    var colorthief = new ColorThief();
    var img = new Image()
    img.src = '/123.jpg'
  if (img.complete) {
      var res = colorthief.getColor(img);
      console.log('======网速很快', res);
      setResultColor(res)
    } else {
      img.addEventListener('load', function () {
        var res = colorthief.getColor(img)
        console.log('======事件监听', res);
        setResultColor(res)
      });
    }
},[])



<img src={aa} id="tupian" />
<div style={
  { width: '100px', height: '100px', backgroundColor: `rgba(${resultColor})` }}></div>

图片如果设计跨域,那么需要在img标签上增加crossorigin,同时对应的图片服务器也要增加允许跨域,缺一不可.

附赠2个常用函数

export default function imgToBase64(url) {
  return new Promise((resolve, reject) => {
    const image = new Image()
    image.src = url
    image.onload = () => {
      const canvas = document.createElement('canvas')
      canvas.width = image.naturalWidth // 使用 naturalWidth 为了保证图片的清晰度
      canvas.height = image.naturalHeight
      canvas.style.width = `${canvas.width / window.devicePixelRatio}px`
      canvas.style.height = `${canvas.height / window.devicePixelRatio}px`
      const ctx = canvas.getContext('2d')
      if (!ctx) {
        return null
      }
      ctx.drawImage(image, 0, 0)
      const base64 = canvas.toDataURL('image/png')
      return resolve(base64)
    }
    image.onerror = (err) => {
      return reject(err);
    }
  })
}

export function getURLBase64(url) {
  return new Promise((resolve, reject) => {
    var xhr = new XMLHttpRequest()
    xhr.open('get', url, true)
    xhr.responseType = 'blob'
    xhr.onload = function () {
      if (this.status === 200) {
        var blob = this.response
        var fileReader = new FileReader()
        fileReader.onloadend = function (e) {
          var result = e.target.result
          resolve(result)
        }
        fileReader.readAsDataURL(blob)
      }
    }
    xhr.onerror = function () {
      reject()
    }
    xhr.send()
  })
}

相关推荐

  1. Logstash的使用方法

    2024-01-30 09:58:01       67 阅读
  2. Copilot 使用方法

    2024-01-30 09:58:01       80 阅读
  3. client-go使用方法

    2024-01-30 09:58:01       61 阅读
  4. gorm 使用sql方法

    2024-01-30 09:58:01       51 阅读
  5. GitHub Copilot使用方法

    2024-01-30 09:58:01       60 阅读
  6. pinia 的使用方法

    2024-01-30 09:58:01       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-30 09:58:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-30 09:58:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-30 09:58:01       87 阅读
  4. Python语言-面向对象

    2024-01-30 09:58:01       96 阅读

热门阅读

  1. SouthLeetCode-打卡24年01月第4周

    2024-01-30 09:58:01       47 阅读
  2. vue 3.0 初识

    2024-01-30 09:58:01       50 阅读
  3. MySQL入门篇(3)-数据库的基本概念与术语

    2024-01-30 09:58:01       57 阅读
  4. 安装Hive

    2024-01-30 09:58:01       55 阅读
  5. -webkit-line-clamp 是什么?

    2024-01-30 09:58:01       58 阅读
  6. 龙哥风向标 20230620~20230627 GPT拆解

    2024-01-30 09:58:01       77 阅读