Генерируйте цветовую палитру из изображения

Только для забавы я смотрел на то, как пользоваться библиотекой GD для создания цветовой палитры из изображения. До сих пор я использовал GD для изменения размеров пользовательского загруженного изображения к соответствующему размеру для отображения на веб-странице.

Теперь я хотел бы смочь получить приблизительно приблизительно пять различных цветов из изображения, которые представляют диапазон цветов, существующих в нем. После того как я сделал это, я хотел бы генерировать дополнительную палитру, основанную на тех цветах, которые я могу затем использовать для окраски различных элементов на странице.

Любая справка, которую я могу получить о том, как я нашел бы начальную цветовую палитру, будет очень цениться!

Править: Я пришел к своему собственному решению, которое Вы видите ниже.

5
задан greenie 14 April 2010 в 19:43
поделиться

3 ответа

Ну, я потратил пару дней на возню, и вот как мне удалось собрать свой цветовая палитра. У меня это сработало довольно хорошо, и вы можете изменить размер цветовой палитры, чтобы вернуть больше или меньше цветов из изображения.

// The function takes in an image resource (the result from one
// of the GD imagecreate... functions) as well as a width and
// height for the size of colour palette you wish to create.
// This defaults to a 3x3, 9 block palette.
function build_palette($img_resource, $palette_w = 3, $palette_h = 3) {
    $width = imagesx($img_resource);
    $height = imagesy($img_resource);

    // Calculate the width and height of each palette block
    // based upon the size of the input image and the number
    // of blocks.
    $block_w = round($width / $palette_w);
    $block_h = round($height / $palette_h);

    for($y = 0; $y < $palette_h; $y++) {
        for($x = 0; $x < $palette_w; $x++) {
            // Calculate where to take an image sample from the soruce image.
            $block_start_x = ($x * $block_w);
            $block_start_y = ($y * $block_h);

            // Create a blank 1x1 image into which we will copy
            // the image sample.
            $block = imagecreatetruecolor(1, 1);

            imagecopyresampled($block, $img_resource, 0, 0, $block_start_x, $block_start_y, 1, 1, $block_w, $block_h);

            // Convert the block to a palette image of just one colour.
            imagetruecolortopalette($block, true, 1);


            // Find the RGB value of the block's colour and save it
            // to an array.
            $colour_index = imagecolorat($block, 0, 0);
            $rgb = imagecolorsforindex($block, $colour_index);

            $colour_array[$x][$y]['r'] = $rgb['red'];
            $colour_array[$x][$y]['g'] = $rgb['green'];
            $colour_array[$x][$y]['b'] = $rgb['blue'];

            imagedestroy($block);
        }
    }

    imagedestroy($img_resource);
    return $colour_array;
}
8
ответ дан 13 December 2019 в 19:24
поделиться

это может помочь вам

<?php
$im = ImageCreateFromJpeg($source_file);

$imgw = imagesx($im);
$imgh = imagesy($im);

// n = total number or pixels

$n = $imgw*$imgh;

$colors = array();

for ($i=0; $i<$imgw; $i++)
{
        for ($j=0; $j<$imgh; $j++)
        {

                $rgb = ImageColorAt($im, $i, $j);

                if (isset($colors[$rgb])) {
                    $colors[$rgb]++;
                }
                else {
                    $colors[$rgb] = 1;
                }

        }
}
asort($colors);
print_r($colors);
2
ответ дан 13 December 2019 в 19:24
поделиться

Функция imagecolorat даст вам значение цвета в пикселе, которое вы можете использовать для сканирования изображения и создания цветовой гистограммы:

http://www.php.net/manual/en/function.imagecolorat. php

1
ответ дан 13 December 2019 в 19:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: