Do not speak Portuguese? Translate this site with Google or Bing Translator
Como extrair cores de destaque de uma imagem no Symfony 3

Posted on: July 09, 2020 04:59 PM

Posted by: Renato

Categories: PHP Laravel symfony cor colors

Views: 347

A experiência do usuário é uma das coisas mais importantes a serem consideradas ao criar seu aplicativo. Eles devem ter a opção de alterar a cor da interface do usuário de acordo com o desejo deles, o que tornará seu aplicativo único e interessante para o usuário. Um recurso incrível que você deve implementar é o seguinte: se você permitir que os usuários enviem fotos do perfil, defina a cor da interface do usuário de acordo com a cor dominante da imagem do perfil, como o Github. Você também pode extrair a cor das imagens facilmente no navegador usando JavaScript , mas a implementação no servidor pode ser mais fácil do que lidar com ela no navegador e se preocupar com a compatibilidade em diferentes navegadores.

Neste artigo, você aprenderá como extrair as cores dominantes de uma imagem (ou paleta de cores personalizada) usando 3 bibliotecas PHP diferentes no seu projeto Symfony 3.

A. Using ColorExtractor - Installation

$ composer require league/color-extractor:0.3.*

Alternatively, you can install it manually by modifying the composer.json file of your project and adding the library as a dependency:

{
    "require": {
        "league/color-extractor": "0.3.*"
    }
}
 

Em seguida, execute a instalação do compositor e você estará pronto para usá-lo. Para mais informações sobre a biblioteca, visite o repositório oficial do Github aqui. the official Github repository here.

Extracting most important colors

O Color Extractor cria uma paleta de cores no momento em que você fornece um caminho de imagem para o método estático fromFilename. Essa paleta contém todas as cores da imagem como uma matriz com números inteiros; cada número inteiro representa uma cor; portanto, você precisa usar o fromInToHexmétodo da classe Color:

 

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

/**
 * Import Library required classes
 */
use League\ColorExtractor\Color;
use League\ColorExtractor\ColorExtractor;
use League\ColorExtractor\Palette;

class DefaultController extends Controller
{
    /**
     * @Route("/", name="homepage")
     */
    public function indexAction(Request $request)
    {
        // The relative or absolute path to the image file
        $imagePath = $this->get('kernel')->getRootDir() . '/../web/bird.png';
        
        // Create the palette of the image
        $palette = Palette::fromFilename($imagePath);

        // Create an instance of the extractor
        $extractor = new ColorExtractor($palette);

        // Extract only the 5 representative colors in the image
        $colors = $extractor->extract(5);

        // An array to store the hexadecimal colors
        $hexColors = [];

        // Loop through the 5 representative colors (in integer format)
        foreach($colors as $color) {

            // Convert the number to its hex representation and add to the $hexColors array
            array_push($hexColors , Color::fromIntToHex($color));
        }

        // ["#FF7B16","#DFC017","#679C0C","#E60B11","#186108"]
        return new Response(json_encode($hexColors));
    }
}

Extraindo todas as cores

Você pode percorrer toda a paleta para recuperar todas as cores da imagem (observe que o tamanho da matriz será bastante grande de acordo com a imagem):

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

/**
 * Import Library required classes
 */
use League\ColorExtractor\Color;
use League\ColorExtractor\ColorExtractor;
use League\ColorExtractor\Palette;

class DefaultController extends Controller
{
    /**
     * @Route("/", name="homepage")
     */
    public function indexAction(Request $request)
    {
        // The relative or absolute path to the image file
        $imagePath = $this->get('kernel')->getRootDir() . '/../web/bird.png';
        
        // Create the palette of the image
        $palette = Palette::fromFilename($imagePath);

        // Create an instance of the extractor
        $extractor = new ColorExtractor($palette);

        // An array to store the hexadecimal colors
        $hexColors = [];

        // Loop through the 5 representative colors (in integer format)
        foreach($palette as $color => $count) {

            // Convert the number to its hex representation and add to the $hexColors array
            array_push($hexColors , Color::fromIntToHex($color));
        }

        // ["#FF7B16","#DFC017","#679C0C","#E60B11","#186108", .......]
        return new Response(json_encode($hexColors));
    }
}

B. Usando o ImagePalette
O ImagePalette é usado para extrair uma paleta de cores de uma determinada imagem. Além de ser uma implementação nativa do PHP, o ImagePalette difere de muitos extratores de paleta, pois funciona com uma paleta de cores da lista branca.

Instalação
Para instalar esta biblioteca em seu projeto, abra um terminal, alterne para o diretório do seu projeto e instale-o usando:

$ composer require brianmcdo/image-palette

Como alternativa, você pode modificar seu composer.jsonarquivo e adicionar a biblioteca como uma dependência manualmente:

{
    "require": {
        "brianmcdo/image-palette": "^2.0"
    }
}
E então corra composer install. Para mais informações sobre esta biblioteca, visite o repositório oficial do Github aqui .

Extraindo cores
A extração de cores com esta biblioteca é bastante simples, basta importar a classe ImagePalette e, em seguida, prossiga para criar uma instância dela. O construtor espera que o caminho relativo ou absoluto do arquivo seja processado (ele também funciona com URLs externos). Em seguida, obtenha a paleta de cores acessando a colorspropriedade da instância criada:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

/**
 * Import the ImagePalette class
 */
use BrianMcdo\ImagePalette\ImagePalette;

class DefaultController extends Controller
{
    /**
     * @Route("/", name="homepage")
     */
    public function indexAction(Request $request)
    {
        // The absolute or relative path of the image
        $imagePath = $this->get('kernel')->getRootDir() . '/../web/bird.png';

        // initiate with image
        $palette = new ImagePalette($imagePath);

        // Get the prominent colors
        // That returns an array of Color objects
        $colors = $palette->colors;

        // Or if you want a specific number of colors, use the getColors method and provide
        // as first argument the number of colors that should be returned
        //$colors = $palette->getColors(7); 

        // You can print the colors in different formats
        foreach ($palette as $color) {
            // Color provides several getters/properties
            dump($color);             // '#ffffdd'
            dump($color->rgbString);  // 'rgb(255,255,221)'
            dump($color->rgbaString); // 'rgba(255,255,221,0.25)'
            dump($color->int);        // 0xffffdd
            dump($color->rgb);        // array(255,255,221)
            dump($color->rgba);       // array(255,255,221,0.25)
        }

        // Return the palette as response
        // ["#ffffdd", "#ff9900" ... ]
        return new Response($palette);
    }
}

C. Usando ladrão de cores

 

Uma classe PHP para pegar a paleta de cores de uma imagem. Usa bibliotecas PHP e GD ou Imagick para que isso aconteça. É uma porta PHP da biblioteca Javascript do Color Thief, usando o algoritmo MMCQ (quantificação de corte mediana modificada) da biblioteca Leptonica.

Exigências
Ao contrário das outras bibliotecas deste artigo, o Color Thief possui alguns requisitos para atender a alguns requisitos:

PHP> = 5.3 ou> = PHP 7.0
GD> = 2.0 e / ou Imagick> = 2.0 e / ou Gmagick> = 1.0
Suporte para imagens JPEG, PNG e GIF.
Se você possui o GD ou Imagick instalado no seu servidor, pode trabalhar com esta biblioteca.

Instalação
Para instalar esta biblioteca, abra um novo terminal, alterne para o diretório do projeto e instale-o com o seguinte comando:

$ composer require ksubileau/color-thief-php

Como alternativa, você pode instalá-lo modificando o composer.jsonarquivo do seu projeto e adicionando esta biblioteca como uma dependência:

{
    "require": {
        "ksubileau/color-thief-php": "^1.3"
    }
}
Então corra composer install.

Criando uma paleta de cores
Você pode recuperar uma paleta de todas as cores dominantes da imagem usando o getPalettemétodo estático . Este método espera como primeiro argumento o caminho absoluto ou relativo da imagem a processar e como segundo argumento o número máximo de cores que serão extraídas:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;


/**
 * Import the ColorThief class
 */
use ColorThief\ColorThief;

class DefaultController extends Controller
{
    /**
     * @Route("/", name="homepage")
     */
    public function indexAction(Request $request)
    {
        // The absolute or relative path of the image
        $imagePath = $this->get('kernel')->getRootDir() . '/../web/bird.png';

        // Extract the palette of colors of the image with max. 8 colors
        $palette = ColorThief::getPalette($imagePath, 8);

        // RGB representation of the colors
        // [[221,139,30],[60,100,16],[227,211,181],[196,48,20],[119,141,24],[226,207,32],[84,172,14]]
        return new Response(json_encode($palette));
    }
}

Extraindo cor única
Se você deseja extrair uma única cor, por exemplo, para definir a cor da interface do usuário de acordo com a foto de perfil carregada do usuário, você pode torná-la rápida e simples com o método estático getColor:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;


/**
 * Import the ColorThief class
 */
use ColorThief\ColorThief;

class DefaultController extends Controller
{
    /**
     * @Route("/", name="homepage")
     */
    public function indexAction(Request $request)
    {
        // The absolute or relative path of the image
        $imagePath = $this->get('kernel')->getRootDir() . '/../web/bird.png';

        // Extract the dominant color of the image
        $dominantColor = ColorThief::getColor($imagePath);
        
        // RGB representation of the color
        //  R         G         B
        // [0 => 196, 1 => 139, 2 => 28 ]
        return new Response(json_encode($dominantColor));
    }
}

Feliz codificação !

Fonte: https://ourcodeworld.com/articles/read/356/how-to-extract-prominent-colors-from-an-image-in-symfony-3


2

Share
About Author

Renato

Developer

Add a Comment
Comments 0 Comments

No comments yet! Be the first to comment

Blog Search


Categories

OUTROS (12) Variados (108) PHP (102) Laravel (110) Black Hat (3) front-end (24) linux (82) postgresql (34) Docker (12) rest (4) soap (1) webservice (5) October (1) CMS (2) node (6) backend (10) ubuntu (38) devops (21) nodejs (4) npm (1) nvm (0) git (3) firefox (1) react (6) reactnative (5) collections (1) javascript (4) reactjs (7) yarn (0) adb (1) solid (0) blade (2) models (1) controllers (0) log (0) html (2) hardware (2) aws (14) Transcribe (2) transcription (1) google (3) ibm (1) nuance (1) PHP Swoole (4) mysql (22) macox (2) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (1) imagick (2) ec2 (1) sw (1) websocket (1) markdown (1) ckeditor (1) tecnologia (13) faceapp (1) eloquent (11) query (2) sql (35) ddd (3) nginx (6) apache (4) certbot (1) lets-encrypt (2) debian (9) liquid (1) magento (1) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (1) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (2) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (1) binaural (1) mysqli (3) database (32) windows (2) vala (1) json (2) oracle (1) mariadb (2) dev (12) webdev (23) s3 (4) storage (1) kitematic (1) gnome (2) web (1) intel (1) piada (1) cron (2) dba (12) lumen (1) ffmpeg (1) android (2) aplicativo (1) fedora (2) shell (3) bash (2) script (2) lider (1) htm (1) csv (1) dropbox (1) db (2) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (0) biologia (1) programming (20) performance (1) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (1) microg (1) iode (1) ssh (1) zsh (1) terminal (1) dracula (1) spaceship (1) mac (1) idiomas (1) laptop (1) developer (24) api (1) data (1) matematica (1) seguranca (2) 100DaysOfCode (5) hotfix (1) documentation (1) laravel (1) RabbitMQ (1) Elasticsearch (1) redis (1) Raspberry (3) Padrao de design (3) JQuery (0) angularjs (2) Dicas (7) kubenetes (1) vscode (1) backup (1) angular (1) servers (2) pipelines (1) AppSec (1) DevSecOps (2) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (1) jwt (1) security (1) translate (1) kube (1) iot (1) politica (1) bolsonaro (1) flow (1) podcast (1) Brasil (1)

New Articles



Get Latest Updates by Email