Задать вопрос
TekVanDo
@TekVanDo
Javascript Developer

Как проще получить массив цветов из изображения?

Какую библиотеку лучше использовать? И если возможно алгоритм.
  • Вопрос задан
  • 3513 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
CTAKAH4uK
@CTAKAH4uK
www.php.net/manual/en/function.imagecolorat.php

$w = imagesx($image);
$h = imagesy($image);

$colors = array();

for ($x = 0; $x <= $w; $x++) {
	$colors[$x] = array();
   	 for ($y = 0;$y <= $h; $y++ ) {
		$color = imagecolorat($img, $x, $y);
   		$red = ($rgb >> 16) & 0xFF;
  		$green = ($rgb >> 8) & 0xFF;
		$blue = $rgb & 0xFF;
		$colors[$x][$y] = $color;
	}
}
Ответ написан
golovanov
@golovanov
Нужно получить все или N-найболее используемых цветов?

Найболее используемые можно получить так
// The original image is the average colors
$im = new Imagick( "test.png" );

// Reduce the amount of colors to 10
$im->quantizeImage( 10, Imagick::COLORSPACE_RGB, 0, false, false );

// Only save one pixel of each color
$im->uniqueImageColors();

// Get ImagickPixelIterator
$it = $im->getPixelIterator();

// Reset the iterator to begin
$it->resetIterator();

// palette
$palette = array();

// Loop trough rows
while ($row = $it->getNextIteratorRow()) {
    // Loop trough columns
    foreach ($row as $pixel) {
        $color = $pixel->getColor();
        foreach (array('r', 'g', 'b') as $channel) {
            $color[$channel] = dechex($color[$channel]);
            if (strlen($color[$channel]) != 2) {
                $color[$channel] = '0' . $color[$channel];
            }
        }
        $palette[] = $color['r'] . $color['g'] . $color['b'];
    }
}

// print palette
print_r($palette);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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