1.4.1 • Published 1 year ago
mmcq.js v1.4.1
MMCQ.JS
MMCQ (modified median cut quantization), the name is from Leptonica library (http://www.leptonica.com/).
提取颜色主色调,支持 WebAssembly (Extract prominent colors from image, support WebAssembly)
仅 300 行不到的代码,且零依赖。(< 300 lines source code, zero dependency)
安装 (Install)
pnpm i mmcq.js
# or
yarn add mmcq.js
# or
npm install mmcq.js或者(Or)
<script src="https://cdn.jsdelivr.net/npm/mmcq.js@latest/dist/index.global.js"></script>
<script>
  console.log(window.MMCQJS)
</script>用法 (Usage)
import { mmcq } from 'mmcq.js'
main()
async function main() {
  const img = document.getElementById('img-id') as HTMLImageElement
  const data = getImageData(img, 1)
  const colors = await mmcq(data, {
    count: 8,
    algorithm: 8,
    useWebAssembly: true,
  })
  colors.forEach((color) => console.log(color.rgb))
}
// --------- utils
function getImageData(
  image: HTMLImageElement,
  /**
   * 0.1 - 1
   **/
  imageQuality: number,
): Uint8ClampedArray {
  const sharedCanvasId = 'xxxxxxx'
  const canvas = (document.getElementById(sharedCanvasId) ||
    document.createElement('canvas')) as HTMLCanvasElement
  canvas.id = sharedCanvasId
  canvas.style.display = 'none'
  document.body.append(canvas)
  canvas.width = image.naturalWidth * imageQuality
  canvas.height = image.naturalHeight * imageQuality
  canvas.style.width = canvas.width + 'px'
  canvas.style.height = canvas.height + 'px'
  const ctx = canvas.getContext('2d')
  if (!ctx) {
    return [] as any
  }
  ctx.drawImage(image, 0, 0, canvas.width, canvas.height)
  const data = ctx.getImageData(0, 0, canvas.width, canvas.height)
  return data.data
}Development
install wasm-pack: https://rustwasm.github.io/wasm-pack/installer/
- build wasm
 
pnpm run wasm- start dev server
 
pnpm i
pnpm run dev
# or
pnpm run dev:wasmContribute
All kinds of contributions are welcome!