2016-03-26 5 views
3

Мне нужно создать палитру цветов с PHP. Я использую такой код:Создание цветовой палитры из изображения в PHP

for ($x = 0; $x < $this->width; $x += $level) { 
    for ($y = 0; $y < $this->height; $y += $level) { 
     $index = imagecolorat($this->workingImage, $x, $y); 
     $rgb = imagecolorsforindex($this->workingImage, $index); 
     $color = $this->getClosestColor($rgb["red"], $rgb["green"], $rgb["blue"]); 
     $hexarray[] = $this->RGBToHex($color[0], $color[1], $color[2]); 
    } 
} 

enter image description here

Как я могу это сделать? Для любой картины мне нужно как минимум 10 цветов. Я пытаюсь использовать другие методы, pixelate изображение перед получением цветовой палитры, но это не помогает мне.

+2

Google [Цветная квантификация] (https://en.wikipedia.org/wiki/Color_quantization) или просто перейдите к [Rosetta Code] (https://rosettacode.org/wiki/Color_quantization). – bishop

+0

Как вы сделали * * «Что мне нужно» * image? –

+0

@bishop спасибо за ответ, я был сделан немного по-другому (используя pixelate, а затем заполняя палитру из изображения результата) –

ответ

2

К сожалению, вы перепутали свой стартовый файл с неправильными результатами и ваших желаемых результатов, поэтому я отделил его как image.png ниже:

enter image description here

Теперь я планирую использовать pnmquant, который является частью пакета NetPBM, который доступен предварительно скомпилированным и готовым к установке на большинстве платформ от SourceForge.

Итак, первый мне нужно преобразовать PNG в формат Netpbm в PPM для pnmquant инструмента для работы - я буду использовать pngtopnm для этого. Затем я хочу извлечь цвета в качестве образца и увеличить образец, чтобы вы могли видеть что-то большее, чем извлеченные 21 пиксель. Я буду использовать ImageMagick для этого, и я хочу сделать его текстовое представление, чтобы вы могли видеть цифры , и я буду использовать ImageMagick для этого.

pngtopnm image.png | pnmquant 21 | pnmtopng > result.png 

enter image description here

convert image.png pnm:- | pnmquant 21 | convert - -unique-colors -scale 400x swatch.png 

enter image description here

convert image.png pnm:- | pnmquant 21 | convert - -unique-colors -depth 8 txt: 

# ImageMagick pixel enumeration: 21,1,65535,srgb 
0,0: (65278,9766,2827) #FE260B srgb(254,38,11) 
1,0: (65278,15163,2570) #FE3B0A srgb(254,59,10) 
2,0: (65535,10794,5140) #FF2A14 srgb(255,42,20) 
3,0: (65535,11565,5140) #FF2D14 srgb(255,45,20) 
4,0: (65278,11308,5140) #FE2C14 srgb(254,44,20) 
5,0: (65535,11822,5140) #FF2E14 srgb(255,46,20) 
6,0: (65278,11822,5140) #FE2E14 srgb(254,46,20) 
7,0: (65278,19532,3341) #FE4C0D srgb(254,76,13) 
8,0: (65278,20817,3855) #FE510F srgb(254,81,15) 
9,0: (65278,16962,5140) #FE4214 srgb(254,66,20) 
10,0: (65535,20303,4369) #FF4F11 srgb(255,79,17) 
11,0: (65278,20817,4626) #FE5112 srgb(254,81,18) 
12,0: (63479,33410,28270) #F7826E srgb(247,130,110) 
13,0: (62451,56540,55769) #F3DCD9 srgb(243,220,217) 
14,0: (62708,61166,59110) #F4EEE6 srgb(244,238,230) 
15,0: (62451,62708,62965) #F3F4F5 srgb(243,244,245) 
16,0: (65278,63736,62965) #FEF8F5 srgb(254,248,245) 
17,0: (62194,65278,65535) #F2FEFF srgb(242,254,255) 
18,0: (65278,64250,63736) #FEFAF8 srgb(254,250,248) 
19,0: (65535,65535,65535) #FFFFFF white 
20,0: (65278,65278,65278) #FEFEFE srgb(254,254,254) 

Что касается PHP, вы можете выложить и EXEC инструменты командной строки выше, или посмотреть на исходный код и адаптироваться к PHP ,

+0

почти лучший результат, но опять же в палитре существуют ненужные цвета, например # f2feff (почти синий). Но это наиболее подходящая палитра, я буду использовать этот путь. Благодаря! –