通过node 后端实现颜色窃贼 (取出某个图片的主体rgb颜色 )

1.需求

我前端轮播图的背景色 想通过每一张轮播图片的颜色作为背景色 这样的话 需要通过一张图片 取出图片的颜色 这个工作通过前端去处理 也可以通过后端去处理 

前端我试了试 color-thief 的插件 但是 这个插件是基于canvas 的模式来的 我需要在小程序中使用这个插件 而且是Taro + vue3 的项目  会报错。

2.解决

我想到了使用后端的能力去取到这个图片的颜色rgb的颜色 我后端使用的是node 项目 

插件是 

colorthief
npm i --save colorthief

颜色窃贼 (lokeshdhakar.com)

网站放到这里了

实现这样的效果  前端 ui效果 

电影图片轮播的时候 会自动获取颜色 

因为我目前只是获取了部分图片的颜色 所以代码的颜色是写死的 

前端

<script setup>
import cityFixed from "./header-city.vue";
import { Search2 } from "@nutui/icons-vue-taro";
import { ref, onMounted, computed } from "vue";
const val = ref("");

const colors = ref([
  [113, 66, 59],
  [242, 216, 179],
  [220, 147, 105],
]);

const colors1 = ref([
  [113, 66, 59],
  [242, 216, 179],
  [220, 147, 105],
]);
const colors2 = ref([
  [210, 199, 193],
  [37, 33, 29],
  [218, 70, 31],
]);
const colors3 = ref([
  [46, 42, 42],
  [177, 169, 171],
  [139, 151, 159],
]);
const colors4 = ref([
  [85, 57, 43],
  [216, 194, 176],
  [176, 180, 175],
]);
const currentImage = ref(
  "https://gw.alicdn.com/tfscom/i3/O1CN01s4djbH29FutyK4fzY_!!6000000008039-0-alipicbeacon.jpg_300x300.jpg"
);
const currentColor = computed(() => {
  const startColor1 = `rgb(${colors.value[0][0]}, ${colors.value[0][1]}, ${colors.value[0][2]})`;
  const startColor2 = `rgb(${colors.value[1][0]}, ${colors.value[1][1]}, ${colors.value[1][2]})`;
  const startColor3 = `rgb(${colors.value[2][0]}, ${colors.value[2][1]}, ${colors.value[2][2]})`;

  return `linear-gradient(to bottom, ${startColor1}, ${startColor2},${startColor3})`;
});
const list = ref([
  "https://gw.alicdn.com/tfscom/i3/O1CN01s4djbH29FutyK4fzY_!!6000000008039-0-alipicbeacon.jpg_300x300.jpg",
  "https://gw.alicdn.com/i4/O1CN01zYtvCj1IXcZQwdhXm_!!6000000000903-0-alipicbeacon.jpg_480x480Q30s150.jpg",
  "https://gw.alicdn.com/i2/O1CN01XZwM5P1u4iycl2qgW_!!6000000005984-0-alipicbeacon.jpg_480x480Q30s150.jpg",
  "https://gw.alicdn.com/tfscom/i2/O1CN01FJb26a1sOIfv6VI4V_!!6000000005756-0-alipicbeacon.jpg",
]);

const handleSwiperChange = (event) => {
  currentImage.value = list.value[event]; // 更新当前显示的图片URL
  if (event == 0) {
    colors.value = colors1.value;
  } else if (event == 1) {
    colors.value = colors2.value;
  } else if (event == 2) {
    colors.value = colors3.value;
  } else {
    colors.value = colors4.value;
  }
};
onMounted(async () => {
});
</script>

 后端

 return ColorThief.getPalette(
     'https://gw.alicdn.com/tfscom/i2/O1CN01FJb26a1sOIfv6VI4V_!!6000000005756-0-alipicbeacon.jpg',
     3
   )
     .then(palette => {
       console.log(palette);
       return palette;
     })
     .catch(err => {
       console.log(err);
     });

接口返回的结果 

{
    "code": 1000,
    "message": "success",
    "data": [
        [
            85,
            57,
            43
        ],
        [
            216,
            194,
            176
        ],
        [
            176,
            180,
            175
        ]
    ]
}

最近更新

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

    2024-03-30 15:52:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-30 15:52:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-30 15:52:02       82 阅读
  4. Python语言-面向对象

    2024-03-30 15:52:02       91 阅读

热门阅读

  1. vue3父子组件之间的传值方式

    2024-03-30 15:52:02       46 阅读
  2. C# 到异常处理 暂时告一段落 开始窗体的学习

    2024-03-30 15:52:02       44 阅读
  3. 每日一题:C语言经典例题之鸡兔同笼

    2024-03-30 15:52:02       44 阅读
  4. Grok - X AI 314B大模型

    2024-03-30 15:52:02       48 阅读
  5. 【SQL】COUNT()函数 用法详解

    2024-03-30 15:52:02       46 阅读
  6. C#面:简述抽象函数(方法)

    2024-03-30 15:52:02       42 阅读
  7. 【PostgreSQL】- 1.2 PostgreSQL 配置单独的数据库存储

    2024-03-30 15:52:02       46 阅读
  8. 【EBS】ORACLE EBS R12财务月结基础

    2024-03-30 15:52:02       35 阅读
  9. python常用的语法

    2024-03-30 15:52:02       48 阅读
  10. Windows MySQL通过data 文件夹恢复数据

    2024-03-30 15:52:02       48 阅读