如何提取图片的主色(不使用库管理工具)

如何提取图片的主色,并作为备注、标签或写入 DEVONthink 的自定义元数据?主要困难在于前半步,后半步应当非常简单。

目的:根据颜色快速过滤图片,就像 Google 图片搜索一样。

场景:

  1. 有一批用于临摹或提取 prompts 的插画,想根据颜色粗略过滤可用素材
  2. 有一批用于业余研究的截图和插画,色系是描述维度之一,例如想研究“工业时代后期蓝色调绘画数量和占比的变动”,可能就要以颜色为过滤条件[^]

限制:

  1. 不使用 Eagle 等库管理工具,避免数据被绑死在某一个软件中
  2. 不使用 GPT,因为不可能把几个GB的数据传上去

[^1] 一点背景知识:蓝色颜料曾经很贵。在这个例子中,我想研究技术、原料、运输等物质条件变化对绘画的影响。

1 Like

搜索 color palette from image 可以找到一些在线工具和包,能支持批量的暂时没找到。

Vielen Dank~;)
理想情况还是用本地工具,以便每次收录新图片,就自动提取主色。

首先安装:npm i --save colorthief@2.3.0

#!/usr/bin/node

const fs = require('fs');
const ColorThief = require('colorthief');

function getDominantColors(folderPath) {
  const files = fs.readdirSync(folderPath);

  files.forEach(file => {
    if (file.endsWith('.jpg') || file.endsWith('.png')) {
      const imagePath = `${folderPath}/${file}`;
      ColorThief.getPalette(imagePath, 5)
        .then(color => {
          console.log(imagePath);
          console.log(color)
        })
        .catch(err => { console.log(err) })
    }
  });
}

const folderPath = '/your/path';
getDominantColors(folderPath);

2 Likes
convert 图片路径 +dither -colors 1 -unique-colors txt:- | grep -o -E "#[^ ]+"

我暂时先用 imagemagick 命令,不过主导色太多的图片不够准(Google 也不准就是了),再打磨一下计算方式~:D

Felz33 的方案应该比 imagemagick 的暴力算法更准,可惜我的环境一般要借 JXA 跑 Javascript,不如 Shell 便捷 QAQ 待我休息日再钻研一下

Dank noch mal~:)

我搜索了一下,感觉这个app是符合你要求的:
leap,可以根据选定的颜色来筛选图片,不是库管理

Danke~:)
可惜问题的目的是提取颜色,以便和 Finder 或 DEVONthink 一起使用,换言之,是将颜色作为诸元数据之一(或许是直接当作标签,比如把色值或色系当标签 #F0D8AE)。
Anyway,我之前没接触过 Leap,容我尝试一下~:D


Actions 中这个动作可以提取主色,不知道 Mac 上能用吗:face_with_monocle:

有,不过要 Sonoma 以上的系统,但工作机不能冒风险尝试,等寒假抽时间研究研究。

1 Like