当前位置:   article > 正文

colorThief+vite+react使用方法

colorThief+vite+react使用方法

 官网:

Color Thief

npm i --save colorthief

 第一种,import载入图片

  1. 经过尝试,在vite中,要引入.mjs版本
  2. import ColorThief from 'colorthief/dist/color-thief.mjs'
  3. 第一种,通过import载入图片
  4. import aa from '@/assets/123.jpg'
  5. const [resultColor,setResultColor]=useState('')
  6. useEffect(()=>{
  7. var colorthief = new ColorThief();
  8. var img = document.getElementById('tupian')
  9. if (img.complete) {
  10. var res = colorthief.getColor(img);
  11. console.log('======网速很快', res);
  12. setResultColor(res)
  13. } else {
  14. img.addEventListener('load', function () {
  15. var res = colorthief.getColor(img)
  16. console.log('======事件监听', res);
  17. setResultColor(res)
  18. });
  19. }
  20. },[])
  21. <img src={aa} id="tupian" />
  22. <div style={{ width: '100px', height: '100px', backgroundColor: `rgba(${resultColor})` }}></div>

第二种,new Image实例

  1. 经过尝试,在vite中,要引入.mjs版本
  2. import ColorThief from 'colorthief/dist/color-thief.mjs'
  3. import aa from '@/assets/123.jpg'
  4. const [resultColor,setResultColor]=useState('')
  5. useEffect(()=>{
  6. var colorthief = new ColorThief();
  7. var img = new Image()
  8. img.src = '/123.jpg'
  9. if (img.complete) {
  10. var res = colorthief.getColor(img);
  11. console.log('======网速很快', res);
  12. setResultColor(res)
  13. } else {
  14. img.addEventListener('load', function () {
  15. var res = colorthief.getColor(img)
  16. console.log('======事件监听', res);
  17. setResultColor(res)
  18. });
  19. }
  20. },[])
  21. <img src={aa} id="tupian" />
  22. <div style={{ width: '100px', height: '100px', backgroundColor: `rgba(${resultColor})` }}></div>

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

附赠2个常用函数

  1. export default function imgToBase64(url) {
  2. return new Promise((resolve, reject) => {
  3. const image = new Image()
  4. image.src = url
  5. image.onload = () => {
  6. const canvas = document.createElement('canvas')
  7. canvas.width = image.naturalWidth // 使用 naturalWidth 为了保证图片的清晰度
  8. canvas.height = image.naturalHeight
  9. canvas.style.width = `${canvas.width / window.devicePixelRatio}px`
  10. canvas.style.height = `${canvas.height / window.devicePixelRatio}px`
  11. const ctx = canvas.getContext('2d')
  12. if (!ctx) {
  13. return null
  14. }
  15. ctx.drawImage(image, 0, 0)
  16. const base64 = canvas.toDataURL('image/png')
  17. return resolve(base64)
  18. }
  19. image.onerror = (err) => {
  20. return reject(err);
  21. }
  22. })
  23. }
  24. export function getURLBase64(url) {
  25. return new Promise((resolve, reject) => {
  26. var xhr = new XMLHttpRequest()
  27. xhr.open('get', url, true)
  28. xhr.responseType = 'blob'
  29. xhr.onload = function () {
  30. if (this.status === 200) {
  31. var blob = this.response
  32. var fileReader = new FileReader()
  33. fileReader.onloadend = function (e) {
  34. var result = e.target.result
  35. resolve(result)
  36. }
  37. fileReader.readAsDataURL(blob)
  38. }
  39. }
  40. xhr.onerror = function () {
  41. reject()
  42. }
  43. xhr.send()
  44. })
  45. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/49654
推荐阅读
相关标签
  

闽ICP备14008679号