Avatar billede kodak Mester
24. juli 2011 - 17:18 Der er 25 kommentarer og
1 løsning

Hvilke 5 bliver vist mest.

Jeg har et script hvor i der bliver udskrevet en masse af ord eksempelvis:

ole * 6
kurt * 4
claus * 2
bo * 5
poul * 38
kamila * 1
Michell * 22
ib * 5
eva * 30

Det kan tydeligt ses at poul kommer igen flest gange der efter eva, Michell, ole, bo, ib.

derfor skal scriptet kun udskrive

poul, eva, Michell, ole, bo, ib.
Avatar billede jakobdo Ekspert
24. juli 2011 - 17:25 #1
Hvilket format har du dine data i ?
En database?
En tekstfil?
Eller?
Avatar billede kodak Mester
24. juli 2011 - 17:32 #2
for hver gang '$char' bliver vist kan der komme et nyt ord.
Avatar billede jakobdo Ekspert
24. juli 2011 - 17:36 #3
Jaja.
Men hvor kommer navn og antal fra?
Har du det i et array?
Fra en database?
Jeg sidder ikke med din kode, så hjælp mig lidt...
Ellers kan jeg ikke hjælpe dig.
Avatar billede kodak Mester
24. juli 2011 - 17:40 #4
Trode jeg havde forklaret det godt men, det skulle måske hjælpe.


  $image = imagecreatefrompng("test.png");
  if ($image) {
    $width = imagesx($image);
    $height = imagesy($image);
    for($y = 0; $y < $height; ++$y) {
      for($x = 0; $x < $width; ++$x) {
        $thiscol = imagecolorat($image, $x, $y);
        $rgb = imagecolorsforindex($image, $thiscol);
        $htmlcol = sprintf("#%2X%2X%2X", $rgb['red'], $rgb['green'], $rgb['blue']);
        $char = $htmlcol;
        echo $char; // Hver gang denne kommer frem er der en ny farve
      }
    }
  }
Avatar billede jakobdo Ekspert
24. juli 2011 - 17:49 #5
Jamen for pokker.
Enten er det bare mig som er torskedum, eller også fatter du hat af hvad jeg skriver.
Men jeg fatter stadig ikke hvor poul og 38 kommer fra?
Er det bare noget du finder på?
Og er da ved at give op, hvis ikke der kommer flere facts på bordet.

Men har du data i et array, så kig på sort()
Har du dem i en database, så kig på ORDER BY nummer_felt
Avatar billede kodak Mester
24. juli 2011 - 18:02 #6
Det var for at gøre det nemmere navnene/ord'ne er farver skrevet af schript'et som får farverne fra et billede.

Man kan vel kalde det et array uden at det er det.
Avatar billede jakobdo Ekspert
24. juli 2011 - 18:13 #7
Jeg tror jeg snakker for døve øre.
Vis mig det script som udskriver ole * 2, poul * 38 etc...
Ellers tror jeg ikke vi kommer videre.
Avatar billede kodak Mester
24. juli 2011 - 18:31 #8
Her er script'er

<?php
  $image = imagecreatefrompng("test.png");
  if ($image) {
    echo '';
    $width = imagesx($image);
    $height = imagesy($image);
    for($y = 0; $y < $height; ++$y) {
      for($x = 0; $x < $width; ++$x) {
        $thiscol = imagecolorat($image, $x, $y);
        $rgb = imagecolorsforindex($image, $thiscol);
        $htmlcol = sprintf("#%2X%2X%2X", $rgb['red'], $rgb['green'], $rgb['blue']);
        $char = $htmlcol . " ";
        $char1 = $char;
        if ($char1 == '# 0 0 0 ') {
        $char1 = '#000000 ';
        }
        $farver = explode(' ', $char1);
                foreach ($farver as $farve) {
                echo $farve . '<br />';
                }
      }
    }
  }
?>

og som sagt er ordene/navnene 'ole' i stedet for farver '#C2C2C2'
Avatar billede jakobdo Ekspert
24. juli 2011 - 18:40 #9
Kan jeg ikke få et link til test.png også?
Så kan jeg lige lege lidt?
Avatar billede kodak Mester
24. juli 2011 - 18:49 #10
Her kan du se hvad der bliver smidt ud:
http://www.line-web.dk/img_a/index.php

Billedet test.png:
http://www.line-web.dk/img_a/test.png
Avatar billede jakobdo Ekspert
24. juli 2011 - 18:51 #11
Jeg forstår nu.
Du har en løsning efter aftensmad. :o)
Avatar billede jakobdo Ekspert
24. juli 2011 - 19:00 #12
Men vil du selv, så gør du kort følgende:

Indlæg alle værdier i et array.
Ala:

$colors[$htmlcol] = 1;
Tæl værdien op hver gang, du møder en du kender.
Til sidst lav:

asort($colors);
$top5 = array_slice($colors,0,5);

og print $top5
Avatar billede kodak Mester
24. juli 2011 - 19:53 #13
kan du komme med et opsætnings eksempel?
Avatar billede kodak Mester
24. juli 2011 - 20:56 #14
jeg mener har du et eksempel på hvordan jeg kan sætte det hele sammen.
Avatar billede jakobdo Ekspert
24. juli 2011 - 21:50 #15
<?php
function rgb2hex($rgb){
  $cols = array_slice($rgb,0,3);
  $out = '#';
  foreach($cols AS $col){
    $out .= strtoupper(str_pad(dechex($col), 2, 0, STR_PAD_LEFT));
  }
  return $out;
}

function debug($input){
  echo '<pre>'.print_r($input,true).'</pre>';
}

$image = imagecreatefrompng("http://www.line-web.dk/img_a/test.png");
$colors = array();
if($image){
  $width = imagesx($image);
  $height = imagesy($image);
 
  for($y = 0; $y < $height; ++$y){
    for($x = 0; $x < $width; ++$x){
      $thiscol = imagecolorat($image, $x, $y);
      $rgb = imagecolorsforindex($image, $thiscol);
      $colors[] = rgb2hex($rgb);
    }
  }
}
$counts = array_count_values($colors);
arsort($counts);
$top5 = array_slice($counts,0,5);
debug($top5);
?>
Avatar billede kodak Mester
24. juli 2011 - 22:05 #16
ønsker kun at den printer farven koderne ud ikke hele array'et
Som eksempelvis:

#000000 #052C67 #EAFFFF #E9FFFF #EBFFFF #E8FFFF
Avatar billede jakobdo Ekspert
24. juli 2011 - 22:26 #17
Bare ret til:

$top5 = array_keys(array_slice($counts,0,5));

så indeholder $top5 de 5 "top" farver.
Avatar billede kodak Mester
24. juli 2011 - 22:43 #18
Takker har den:

foreach ($top5 as $top5_key => $top5_value) {
    echo $top5_value;
    }

Send svar takker og god nat.
Avatar billede jakobdo Ekspert
24. juli 2011 - 22:45 #19
Svar
Avatar billede kodak Mester
24. juli 2011 - 22:55 #20
i den gamle havde jeg en der hed hvis verdien er det samme som '# 0 0 0' skal den kalde verdien '#000000'
hvor sætter jeg den ind nu?
fordi verdien '# 0 0 0' betyder trensperent
og den vil jeg gerne have ikke bliver taget med i udlæsningen.
Avatar billede jakobdo Ekspert
24. juli 2011 - 23:04 #21
Den er ikke nødvendig i min kode.
Der er taget hånd om det.
Avatar billede kodak Mester
25. juli 2011 - 14:11 #22
Jeg vil gerne have at den kan skelne mellem 'sort' og 'transparent'
så transparent eksempelvis kan hede '#TTTTTT' eller noget i den dur.
Da 'T' ikke eksistere er den nem at undgå men hvis den hedder det samme som sort er den ikke nem at skelne imellem.
Avatar billede jakobdo Ekspert
25. juli 2011 - 14:44 #23
Og hvilken farve kode har transparent?

Og takker for point.
Avatar billede kodak Mester
28. juli 2011 - 17:44 #24
normalt har den ingen farvekode men i scriptet bruger den #000000 hvor jeg gerne vil have at den bruger eksempel vis #TTTTTT.

Kan man få den til at lave et større spring mellem farverne Så den ikke viser flere nyancer af eksempelvis SORT
Avatar billede jakobdo Ekspert
28. juli 2011 - 20:29 #25
Men hvordan skal koden kende forskel på #000000 (transparent) og den "rigtige" farve #000000?
Avatar billede kodak Mester
28. juli 2011 - 22:04 #26
det kunne min gamle
der udskrev den '# 0 0 0' hvis det var transparent.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester