Помогите пожалуйста реализовать на php следующее:
распознать цвета каждого пикселя на картинке и записать их вывести их массивом или записать в базу данных. в виде: координаты пикселя = цвет в RGB
как вариант может попробовать функцию imagecolorat и поочередно в цикле перебрать все пиксели картинки.
$color = imagecolo6rat($image, $x[i], $y[j]);
Помогите пожалуйста
1. maxy666 - 15 Марта, 2013 - 20:33:59 - перейти к сообщению
2. Мелкий - 15 Марта, 2013 - 21:50:00 - перейти к сообщению
maxy666 пишет:
как вариант может попробовать функцию imagecolorat и поочередно в цикле перебрать все пиксели картинки.
Ну, в общем-то, других вариантов и не предвидится.
3. TroL - 03 Апреля, 2013 - 12:37:09 - перейти к сообщению
Вот мой старый пример, реализует вот что...
берет картинку, проганяет по всем пикселям и считывает цвет.
сокращает количество отенков из 16 000 000 до 4 000
потом подсчитывает количество тех или иных цветов, и берет 8 самых популярных цветов, потом обеденяем в строку и записываем в бд
берет картинку, проганяет по всем пикселям и считывает цвет.
сокращает количество отенков из 16 000 000 до 4 000
потом подсчитывает количество тех или иных цветов, и берет 8 самых популярных цветов, потом обеденяем в строку и записываем в бд
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- $img = ПУТЬ К КАРТИНКИ;
- $color = color_index($img);
- $query = "UPDATE `catalog_photo` SET
- `color` = '$color'
- WHERE `id` = $row[id] LIMIT 1";
- function color_index($source_src,$index_colors=8)//индексирование цветов картинки
- {
- $image_type=file_ext($source_src);//расширение файла изображения, ничего сложного
- echo $image_type;
- switch ($image_type)//загнали img в дескриптор, для каждого типа файла своя ф-ия
- {
- }
- $b = 1;
- $size1 = $size[1]*2;
- $size2 = $size1+50;
- $size0 = $size[0]*2;
- for($y=0;$y<=$size[1]-1;$y++)//перебираем точки картинки по x
- {
- for($x=0;$x<=$size[0]-1;$x++)//перебираем точки картинки по y
- {
- $rgb_arr[0]=$rgb_arr_0['red'];
- $rgb_arr[1]=$rgb_arr_0['green'];
- $rgb_arr[2]=$rgb_arr_0['blue'];
- $I[$color]++;
- $INDEX[$color]=rgb2hex2rgb(implode('.',$rgb_arr));//rgb в hex, заносим все данные для последующего построения рейтинга
- //$rgb = "($rgb_arr[0], $rgb_arr[1], $rgb_arr[2])";
- //$newColor = newColorMask($INDEX[$color]);
- //var_dump($newColor);
- $b++;
- }
- $ngb = 0;
- }
- foreach($INDEX as $key=>$color_hex){//перебираем все полученые цвета, представим как номер цвета php GD в палитре изображения => цвет в hex
- $out_0[$I[$key]][]=$color_hex;//для каждого цвета создадим суб-массив, в него запишем инкриментом количество вхождений данного цвета sizeof($out_0[$I[$key]])= к-во н-ого цвета в массиве цветов
- #echo $color_hex.' => '.$I[$key].'
- //как бы такой массив
- }
- foreach($out_0 as $incolor){//переберем все hex суб-массивы в обратном порядке, обеденим многомерный массив в одномерный
- }
- //две предыдущие операции - гарантия получения одномерного массива
- //var_dump($out);
- foreach ($out as $key => $out_mask){
- $outval[0] = $maskcolor2[$outkey[0]];
- $outval[1] = $outval[0];
- $outval[2] = $maskcolor2[$outkey[2]];
- $outval[3] = $outval[2];
- $outval[4] = $maskcolor2[$outkey[4]];
- $outval[5] = $outval[4];
- $outvalue[$key] = '#'.$outval[0].$outval[1].$outval[2].$outval[3].$outval[4].$outval[5];
- /* $outearr[1] = $outearr[0];
- $outearr[3] = $outearr[2];
- $outearr[5] = $outearr[4];
- $new_out[$key] = "#".$outearr[0].$outearr[1].$outearr[2].$outearr[3].$outearr[4].$outearr[5];*/
- }
- $out = $outvalue;
- $outers[] = $key;
- $outersval[] = $val;
- }
- for($i=sizeof($outers);$i>sizeof($outers)-$index_colors;$i--)//получим $out_0[0]=hex с max числом вхождений, т.е. самый частовстречающийся цвет по рейтингу
- {
- $out_0[]=$outer[$i];
- }
- /*
- foreach ($outs[0] as $key=>$outer) {
- echo "<div style='float:left; width:105px; height:20px; margin:5px; background-color:".$outer."'>".$outer."-".$outersval[$key]."</div>";
- }*/
- //
- return $outs[0];//вернули массив наиболее частовстречающихся цветов по рейтингу, где $out_0[0] = наиболее частый
- }
- function newColorMask($out_mask){
- $outval[0] = $maskcolor2[$outkey[0]];
- $outval[1] = $outval[0];
- $outval[2] = $maskcolor2[$outkey[2]];
- $outval[3] = $outval[2];
- $outval[4] = $maskcolor2[$outkey[4]];
- $outval[5] = $outval[4];
- $outvalue = '#'.$outval[0].$outval[1].$outval[2].$outval[3].$outval[4].$outval[5];
- //$new_out = "#".$outearr[0].$outearr[1].$outearr[2].$outearr[3].$outearr[4].$outearr[5];
- //$new_out1 = "#".$outearr[0].$outearr[0].$outearr[2].$outearr[2].$outearr[4].$outearr[4];
- return $outvalue;
- }
- function file_ext($file)//на входе - имя файла (можно с путями),возвращает расширение файла изображения
- {
- }
- function rgb2hex2rgb($c)//конверт rgb->hex->rgb
- {
- if(!$c) return false;
- $out = false;
- if($l){
- }else $out = false;
- $out = '#';
- for($i = 0; $i<3; $i++)
- for($i = 0; $i<3; $i++)
- }else $out = false;
- return $out;
- }