Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: analizzatore di colore

  1. #1

    analizzatore di colore

    Buongiorno, avrei un problema abbastanza complesso, è possibile individuare in un immagine tramite php quale è il colore predominante? esistono funzioni che svolgono questo lavoro?

    Grazie mille

  2. #2
    nessuno mi sa dare una mano?

  3. #3
    ho trovato questo sito dove riporta esattamente il tipo di ricerca per colore che vorrei realizzare, spero che qualcuno di voi mi possa aiutare su come realizzare una cosa simile.
    http://www.istockphoto.com/file_search.php

    Grazie mille

  4. #4
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    hai provato a fare un upload su quel sito ?

    Magari in fase di inserimento ti chiede di selezionare il colore a percentuale maggiore....

    Perchè altrimenti con php non saprei proprio come fare....

  5. #5
    anche se fosse manuale la selezione io avrei bisogno dif arla automatica, qualcuno sa darmi qualche indicazione al riguardo.
    Grazie mille

  6. #6
    Usi le librerie gd e memorizzi pixel per pixel qual'è il colore poi vedi qual'è il più usato.

    int imagecolorat ( resource image, int x, int y )

    ti ritorna l'indice per un punto dell'immagine.

    array imagecolorsforindex ( resource image, int index )

    ti ritorna una array associativo con i valori umanamente comprensibili (RGB) per l'indice.

    Con un ciclo attraversi l'immagine con queste funzioni e hai finito
    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

  7. #7
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    io comprerei un server di scorta....

    facciamo 2 veloci calcoli.. un'immagine da 1024x768 ha 786432 pixel.
    Non ho mai provato, ma ciclare i 786432 elementi di un array credo che sia un po' troppo oneroso per un server web... (soprattutto quando è la funzione principale di un sito)


  8. #8
    Originariamente inviato da gianiaz
    io comprerei un server di scorta....

    facciamo 2 veloci calcoli.. un'immagine da 1024x768 ha 786432 pixel.
    Non ho mai provato, ma ciclare i 786432 elementi di un array credo che sia un po' troppo oneroso per un server web... (soprattutto quando è la funzione principale di un sito)

    Beh.. ha chiesto come fare con php... gli ho risposto
    Altri modi (a meno che non si metta a lavorare con i byte) non ne vedo e cmq sarebbero più lenti.

    Cmq anche tu sei un po' esagerato
    Non è mica detto che deve lavorare per forza con immagini 1024 e non è nemmeno detto che sia la funzione principale del sito.. magari fa una ricerca ogni due o tre giorni :maLOL:

    Dai cmq.. scherzi a parte.. chi se ne frega del 1024.. questo test può farlo su una versione ridotta dell'immagine, tanto percentualmente dovrebbe essere più o meno rispettato l'ordine.

    Poi non è detto che deve avere un array da WxH elementi.
    Quando individua un valore lo aggiunge alla lista. Basta per esempio usare un array associativo.
    Per esempio

    Codice PHP:
    $r 255;
    $b 255;
    $g 255;

    $colori[$r_$b_$g]++; 
    e via dicendo..
    Quindi, se sicuramente in una foto i colori si ripetono abbastanza spesso, in un immagine grafica ancora di più, direi che si troverà con un array più ridotto.
    Inoltre potrebbe anche considerare l'immagine con colori 16bit come fanno su quel sito.
    Questo restinge a massimo 65k colori, quindi male che vada 65k indici.
    Poi basta trovare il valore più alto nell'array e dall'indice si può risalire al colore.
    Se ancora è lento si possono usare anche altre tecniche.. per esempio si può approssimare un colore a quello più prossimo, o ai 5 più prossimi (non credo che da quel softwae dipenda il futuro dell'umanità.. vero? ).

    Si può fare abweb, si può fare.
    Non farti prendere dal pessimismo di gianiaz

    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

  9. #9
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Originariamente inviato da IroN@xiD

    Non farti prendere dal pessimismo di gianiaz


    No, però se ci pensi deve comunque ciclare un numero di elementi enorme.
    Sono pessimista perchè ho pensato che se vuole sviluppare una funzione del genere probabilmente il suo scopo è quello di sviluppare un sito simile a quello che ci ha linkato.. e quindi se non è la funzione principale è una delle principali

  10. #10
    Beh, si
    Sono un sacco di operazioni.
    Più che altro il problema sono le dimensioni dell'immagine.
    Tuttavia ridimensionandola si dovrebbe rientrare in un limite accettabile di operazioni.
    Può fare dei test e decidere a che dimensione ridimensionare per avere un carico accettabile.

    Dipende come sempre dall'host.. è che io sono abituato bene a lavoro. Ho un dual xeon con 2gb di ram come webserver

    In realtà cmq non c'è molto da fare per php se ci pensi..
    Le librerie gd sono scritte in c quindi quando invoca le loro funzioni tutto viene eseguito a C-velocità. A php rimane solamente il compito di mettere nell'array e trovare poi qual'è il valore maggiore.

    Eseguire questo script

    Codice PHP:
    $colori = Array();
    for(
    $x 0$x 65000$x++) $colori[rand(1,255).'_'.rand(1,255).'_'.rand(1,255)]++;

    $maxval 0;
    foreach(
    $colori as $val) if($val>$maxval$maxval $val;

    echo 
    $maxval
    sul mio portatile impiega meno di un secondo.
    Quindi il problema non è tanto ciclare l'array con php.
    Bisogna vedere quanto veloce è gd... anzi..
    dato che ci sono e sono curioso scrivo io il codice ad abweb (fanno 15€ iva esclusa )

    Codice PHP:
    <?

    set_time_limit
    (0);

    $st time();

    $im imagecreatefromjpeg('file.jpg');
    list(
    $w$h) = getimagesize('file.jpg');

    $colori = Array();
    for(
    $x 0$y 0$x $w && $y $h$x++) {
        
    $i imagecolorat$im$x$y);
        
    /* 
        $r = ($i >> 16) & 0xFF;
        $g = ($i >> 8) & 0xFF;
        $b = $i & 0xFF;
        echo "RGB($r,$g,$b)";
        */
        
    $c imagecolorsforindex($im,$i);
        
    //print_r($c); exit;
        
    $colori[$c['red'].'_'.$c['green'].'_'.$c['blue']]++;
        if(
    $x==$w-1) {
            
    $x 0;
            
    $y++;
        }
    }

    $maxval 0;
    foreach(
    $colori as $idx => $val) {
        if(
    $val>$maxval) {
            
    $maxval $val;
            
    $maxidx $idx;
        }
    }


    echo 
    $maxidx" => "$maxval"
    "
    ;
    list(
    $r,$g,$b) = explode('_',$maxidx);

    echo 
    "RGB($r,$g,$b) in ".(time()-$st)."s.";

    ?>
    Impiega (sul mio portatile 1400mhz celeron M, 736mb RAM ) con apache2 e php5 circa 6secondi per un 1024, 2-3 secondi per un 640x480.

    Pensavo molto peggio.. è più che accettabile sia come carico che come tempo di esecuzione.

    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.