【发布时间】:2021-04-21 19:06:34
【问题描述】:
我正在尝试创建一个从 JPG、PNG、... 生成直方图的脚本 我可以使用 imagecolorat 逐个像素地获取所有颜色,但如果我想在 CSS 中显示它们,我需要将它们转换为 RGB。
我使用了以下脚本,该脚本可在许多网站上找到:
$r = ($a >> 16) & 0xFF;
$g = ($a >> 8) & 0xFF;
$b = $a & 0xFF;
$v = round(($r + $g + $b) / 3);
因为我想在直方图下显示相应的颜色,所以我做了以下操作:
$mapping = array();
for ($a=0;$a<=16777215;$a++)
{
$r = ($a >> 16) & 0xFF;
$g = ($a >> 8) & 0xFF;
$b = $a & 0xFF;
$v = round(($r + $g + $b) / 3);
$mapping[$v] = $r.",".$g.",".$b;
}
这个数组的输出如下:
Array
(
[0] => 1,0,0
[1] => 4,0,0
[2] => 7,0,0
[3] => 10,0,0
[4] => 13,0,0
[5] => 16,0,0
[6] => 19,0,0
[7] => 22,0,0
[8] => 25,0,0
[9] => 28,0,0
[10] => 31,0,0
[11] => 34,0,0
[12] => 37,0,0
[13] => 40,0,0
[14] => 43,0,0
[15] => 46,0,0
[16] => 49,0,0
[17] => 52,0,0
[18] => 55,0,0
[19] => 58,0,0
[20] => 61,0,0
[21] => 64,0,0
[22] => 67,0,0
[23] => 70,0,0
[24] => 73,0,0
[25] => 76,0,0
[26] => 79,0,0
[27] => 82,0,0
[28] => 85,0,0
[29] => 88,0,0
[30] => 91,0,0
[31] => 94,0,0
[32] => 97,0,0
[33] => 100,0,0
[34] => 103,0,0
[35] => 106,0,0
[36] => 109,0,0
[37] => 112,0,0
[38] => 115,0,0
[39] => 118,0,0
[40] => 121,0,0
[41] => 124,0,0
[42] => 127,0,0
[43] => 130,0,0
[44] => 133,0,0
[45] => 136,0,0
[46] => 139,0,0
[47] => 142,0,0
[48] => 145,0,0
[49] => 148,0,0
[50] => 151,0,0
[51] => 154,0,0
[52] => 157,0,0
[53] => 160,0,0
[54] => 163,0,0
[55] => 166,0,0
[56] => 169,0,0
[57] => 172,0,0
[58] => 175,0,0
[59] => 178,0,0
[60] => 181,0,0
[61] => 184,0,0
[62] => 187,0,0
[63] => 190,0,0
[64] => 193,0,0
[65] => 196,0,0
[66] => 199,0,0
[67] => 202,0,0
[68] => 205,0,0
[69] => 208,0,0
[70] => 211,0,0
[71] => 214,0,0
[72] => 217,0,0
[73] => 220,0,0
[74] => 223,0,0
[75] => 226,0,0
[76] => 229,0,0
[77] => 232,0,0
[78] => 235,0,0
[79] => 238,0,0
[80] => 241,0,0
[81] => 244,0,0
[82] => 247,0,0
[83] => 250,0,0
[84] => 253,0,0
[85] => 255,1,0
[86] => 255,4,0
[87] => 255,7,0
[88] => 255,10,0
[89] => 255,13,0
[90] => 255,16,0
[91] => 255,19,0
[92] => 255,22,0
[93] => 255,25,0
[94] => 255,28,0
[95] => 255,31,0
[96] => 255,34,0
[97] => 255,37,0
[98] => 255,40,0
[99] => 255,43,0
[100] => 255,46,0
[101] => 255,49,0
[102] => 255,52,0
[103] => 255,55,0
[104] => 255,58,0
[105] => 255,61,0
[106] => 255,64,0
[107] => 255,67,0
[108] => 255,70,0
[109] => 255,73,0
[110] => 255,76,0
[111] => 255,79,0
[112] => 255,82,0
[113] => 255,85,0
[114] => 255,88,0
[115] => 255,91,0
[116] => 255,94,0
[117] => 255,97,0
[118] => 255,100,0
[119] => 255,103,0
[120] => 255,106,0
[121] => 255,109,0
[122] => 255,112,0
[123] => 255,115,0
[124] => 255,118,0
[125] => 255,121,0
[126] => 255,124,0
[127] => 255,127,0
[128] => 255,130,0
[129] => 255,133,0
[130] => 255,136,0
[131] => 255,139,0
[132] => 255,142,0
[133] => 255,145,0
[134] => 255,148,0
[135] => 255,151,0
[136] => 255,154,0
[137] => 255,157,0
[138] => 255,160,0
[139] => 255,163,0
[140] => 255,166,0
[141] => 255,169,0
[142] => 255,172,0
[143] => 255,175,0
[144] => 255,178,0
[145] => 255,181,0
[146] => 255,184,0
[147] => 255,187,0
[148] => 255,190,0
[149] => 255,193,0
[150] => 255,196,0
[151] => 255,199,0
[152] => 255,202,0
[153] => 255,205,0
[154] => 255,208,0
[155] => 255,211,0
[156] => 255,214,0
[157] => 255,217,0
[158] => 255,220,0
[159] => 255,223,0
[160] => 255,226,0
[161] => 255,229,0
[162] => 255,232,0
[163] => 255,235,0
[164] => 255,238,0
[165] => 255,241,0
[166] => 255,244,0
[167] => 255,247,0
[168] => 255,250,0
[169] => 255,253,0
[170] => 255,255,1
[171] => 255,255,4
[172] => 255,255,7
[173] => 255,255,10
[174] => 255,255,13
[175] => 255,255,16
[176] => 255,255,19
[177] => 255,255,22
[178] => 255,255,25
[179] => 255,255,28
[180] => 255,255,31
[181] => 255,255,34
[182] => 255,255,37
[183] => 255,255,40
[184] => 255,255,43
[185] => 255,255,46
[186] => 255,255,49
[187] => 255,255,52
[188] => 255,255,55
[189] => 255,255,58
[190] => 255,255,61
[191] => 255,255,64
[192] => 255,255,67
[193] => 255,255,70
[194] => 255,255,73
[195] => 255,255,76
[196] => 255,255,79
[197] => 255,255,82
[198] => 255,255,85
[199] => 255,255,88
[200] => 255,255,91
[201] => 255,255,94
[202] => 255,255,97
[203] => 255,255,100
[204] => 255,255,103
[205] => 255,255,106
[206] => 255,255,109
[207] => 255,255,112
[208] => 255,255,115
[209] => 255,255,118
[210] => 255,255,121
[211] => 255,255,124
[212] => 255,255,127
[213] => 255,255,130
[214] => 255,255,133
[215] => 255,255,136
[216] => 255,255,139
[217] => 255,255,142
[218] => 255,255,145
[219] => 255,255,148
[220] => 255,255,151
[221] => 255,255,154
[222] => 255,255,157
[223] => 255,255,160
[224] => 255,255,163
[225] => 255,255,166
[226] => 255,255,169
[227] => 255,255,172
[228] => 255,255,175
[229] => 255,255,178
[230] => 255,255,181
[231] => 255,255,184
[232] => 255,255,187
[233] => 255,255,190
[234] => 255,255,193
[235] => 255,255,196
[236] => 255,255,199
[237] => 255,255,202
[238] => 255,255,205
[239] => 255,255,208
[240] => 255,255,211
[241] => 255,255,214
[242] => 255,255,217
[243] => 255,255,220
[244] => 255,255,223
[245] => 255,255,226
[246] => 255,255,229
[247] => 255,255,232
[248] => 255,255,235
[249] => 255,255,238
[250] => 255,255,241
[251] => 255,255,244
[252] => 255,255,247
[253] => 255,255,250
[254] => 255,255,253
[255] => 255,255,255
)
如您所见,这里已经出现了一些错误,因为缺少一大堆颜色。
我从假设 imagecolorat 的最大值为 16777215 开始。我通过询问白色像素的颜色索引得到该值。我错了吗?
您知道如何为直方图设置更准确的颜色数组吗?
谢谢
蓝色和绿色完全消失了。
【问题讨论】:
标签: php