Skip to content

Commit ee35ce4

Browse files
committed
New: Extract dominant colour from image
1 parent ed8c9e9 commit ee35ce4

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

.changeset/late-books-fly.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@tidaltheory/lens': minor
3+
---
4+
5+
Extract dominant colour from image

src/cli.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ import process from 'node:process'
55

66
import { globby } from 'globby'
77
import { JSONFile, Low } from 'lowdb'
8-
import ora from 'ora'
8+
import ora, { oraPromise } from 'ora'
99
import sade from 'sade'
1010
import sharp from 'sharp'
1111
import { PackageJson } from 'type-fest'
1212

1313
import { loadConfig } from './lib/context.js'
14+
import { getDominantPalette } from './lib/dominant.js'
1415
import { generateFingerprint } from './lib/fingerprint.js'
1516
import { matchThumbnail, writeThumbnail } from './lib/thumbnail.js'
1617
import type { ImageRecord, ImageThumbnails } from './types.js'
@@ -73,6 +74,10 @@ prog.command('add <src>')
7374
let sharpImage = sharp(source)
7475
let { width, height } = await sharpImage.metadata()
7576
let fingerprint = await generateFingerprint(sharpImage)
77+
let dominantPalette = await oraPromise(
78+
getDominantPalette(sharpImage),
79+
{ successText: 'Extracted dominant colours' }
80+
)
7681

7782
let { dir, name: imageName, ext } = parse(source)
7883
let filename = useFilenameDirectory
@@ -148,6 +153,7 @@ prog.command('add <src>')
148153
let entry: ImageRecord = {
149154
path: filename,
150155
dimensions: { width, height },
156+
colors: dominantPalette,
151157
thumbnails: entryThumbnails,
152158
}
153159

@@ -171,7 +177,11 @@ prog.command('add <src>')
171177
}
172178
}
173179

174-
spinner.succeed(`Processed ${processed} images ...DONE!`)
180+
spinner.succeed(
181+
`Processed ${processed} ${
182+
processed === 1 ? 'image' : 'images'
183+
} ...DONE!`
184+
)
175185
})
176186

177187
prog.command('jpg <src>')

src/lib/dominant.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import type { Sharp } from 'sharp'
2+
3+
export async function getDominantPalette(image: Sharp) {
4+
let { dominant } = await image.stats()
5+
return [`rgb(${dominant.r}, ${dominant.g}, ${dominant.b})`]
6+
}

0 commit comments

Comments
 (0)