Угловой 5, получить цвета с изображения

У меня есть приложение для Android, которое использует android.support.v7.graphics.Palette, чтобы получить информацию о цвете из динамического изображения, а затем настроить макет действия, чтобы использовать измененные цвета из изображения. Мой вопрос, есть ли в Angular 5 что-то похожее? Я хочу смоделировать веб-версию этого проекта как можно ближе к версии для Android. Это будет означать динамическую настройку нескольких стилевых цветов после выбора изображения.

Обновление: я искал ColorThief() для JavaScript. Но я не уверен, как получить к нему доступ из компонента Angular 5.

Спасибо пк

1 ответ

Для тех, кто ищет что-то подобное, я использовал node-vibrant.js. Я запустил npm install и добавил файл в массив скриптов в файле angular.json

"scripts": [
  "node_modules/node-vibrant/dist/vibrant.min.js"
]

Затем я изменил свой файл tsconfig.json следующим образом:

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "allowSyntheticDefaultImports": true,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "module": "commonjs",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2017",
      "dom"
    ]
  },
  "allowJs": true
}

Затем я импортировал Vibrant и Palette в свой угловой компонент 6.0.0

import Vibrant from 'node-vibrant';
import { Palette } from 'node-vibrant/lib/color';

Тогда было довольно легко вызвать ngOnInit() с помощью ссылки на изображение.

getVibrantColor(url: string){
  // Using builder
  Vibrant.from(url).getPalette((err, palette) => {
    console.log(palette)
    this.palette = palette;
  });

}

styleContainer(): any {
  console.log('palette', this.palette);
  if (this.palette.LightVibrant) {
    return { 'background-color': this.palette.LightVibrant.getHex(), 'border-color': 
      this.palette.LightMuted.getHex(), 'color': '#000000' };
  } else {
    return { 'background-color': '#FFFFFF', 'border-color':        
       this.palette.LightMuted.getHex(), 'color': '#000000' };
  }

}

И вызвать его из HTML-файла:

<div *ngIf="palette" class="col-lg-8 details-top-container" 
[ngStyle]="styleContainer()"></div>

Сложнее всего было получить правильное заявление на импорт.

import * as Vibrant from 'node-vibrant';

не будет работать, поскольку документация говорит, что это будет.

Надеюсь, это сэкономит кому-то время.

PK

Другие вопросы по тегам