在PHP中从图像生成调色板

时间:2016-03-26 13:56:47

标签: php image

我需要用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种颜色。我尝试使用其他方法,在接收调色板之前像素化图像,但它对我没有帮助。

1 个答案:

答案 0 :(得分: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,您可以在上面执行命令行工具,或查看源代码并适应PHP。