Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di PaoDJ
    Registrato dal
    Oct 2001
    Messaggi
    273

    Numero di colori in una immagine

    Ciao,

    ho un immagine jpeg. Come posso conoscere il numero dei colori di cui l'immagine è composta?

    Scopo finale è evitare immagini "monocromatiche", composte cioè da 1 unico colore.

    Vi allego un esempio di immagine che vorrei bloccare..
    Immagini allegate Immagini allegate

  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    non credo proprio si possa, ma se trovi soluzione fai sapere...

  3. #3
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Prova questo.

    codice:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    
    <html>
    <head>
    <title>Untitled</title>
    </head>
    <body>
    <?php 
    
    define ("IMMED_STOP_IF_MORE_COLORS",true);
    
    class CountColors {
     var $image       = "";
     var $im;
     var $arrayColors = array();
     var $countColors = 0;
     
     function CountColors($imgname,$stopIfMoreThanOneColor=false) {
      //------ Testo se l'immagine è .gif o .jpg
      if (eregi("[.](.{3})$",$imgname,$regs)) {
       if ($regs[1] == "gif") {
        $this->im = @imagecreatefromgif($imgname);  
       } else {
    	  if ($regs[1] == "jpg") {
         $this->im = @imagecreatefromjpeg($imgname);  
    		} else {
          die("Errore : tipo di immagine sconosciuto - sono validi i files con estensione .gif o .jpg");
    		} // if ($regs[1] == "jpg")
    	 } // if ($regs[1] == "gif")
    	} // if (eregi("[.](.{3})$",$imgname,$regs))	
    	
    	//------  Verifica  
      if ($this->im) { 
       $width    = imagesx($this->im);
    	 $height   = imagesy($this->im);
    	 for ($i=0;$i<$width;$i++) {
    	  for ($j=0;$j<$height;$j++) {
    	  $colorIndex = imagecolorat($this->im,$i,$j);
         if (! in_array($colorIndex, $this->arrayColors)) {
          $this->arrayColors[] = $colorIndex;
    		  $this->countColors++;
    			if ($stopIfMoreThanOneColor and $this->countColors > 1) {
    			 break 2;
    			} // if ($stopIfMoreThanOneColor and $countColors > 1)
         } // if (! in_array($colorIndex, $arrayColors)) 
    	  } // for ($j=0;$j<$height;$j++)
    	 } // for ($i=0;$i<$width;$i++)
    	} else {
    	 die("Errore : immagine non trovata");
      } // if ($this->im) {	 
     } // function CountColors($imgname,$stopIfMoreThanOneColor=false)
     
     function getColorsArray() {
      $arrColors = array();
    	foreach ($this->arrayColors as $key => $value) {
    	 $arr = imagecolorsforindex ( $this->im, $value);
    	 //
    	 $red   = dechex($arr['red']);
    	 $red   = strlen($red) == 1 ? "0".$red : $red;
    	 $green = dechex($arr['green']);
    	 $green = strlen($green) == 1 ? "0".$green : $green;
    	 $blue  = dechex($arr['blue']);
    	 $blue  = strlen($blue) == 1 ? "0".$blue : $blue;	 
    	 $arrColors[] = strtoupper('#'.$red.$green.$blue);
    	} // foreach ($this->arrayColors as $key => $value)
    	sort($arrColors);
    	return $arrColors;
     } // function getColors()
     
     function getColorsNumber() {
      return $this->countColors;
     } 
    } // class CountColors 
    
    //------- Si ferma dopo avere trattato tutti i pixels dell'immagine
    $a = new CountColors("http://forum.html.it/forum/logo.gif");
    print "Immagine GIF : Si ferma dopo avere trattato tutti i pixels dell'immagine
    ";
    print "Numero di colori ".$a->getColorsNumber();
    print "
    Lista dei colori :";
    print_r($a->getColorsArray());
    print "<hr>";
    //------- Si ferma dopo avere trattato tutti i pixels dell'immagine
    $c = new CountColors("Image11.jpg");
    print "Immagine JPG : Si ferma dopo avere trattato tutti i pixels dell'immagine
    ";
    print "Numero di colori ".$c->getColorsNumber();
    print "
    Lista dei colori :";
    print_r($c->getColorsArray());
    print "<hr>";
    //------- Si ferma immediatamente se c'è + di un colore
    $b = new CountColors("http://forum.html.it/forum/logo.gif",IMMED_STOP_IF_MORE_COLORS);
    print "Immagine GIF : Si ferma immediatamente se c'è + di un colore
    ";
    print "Numero di colori ".$b->getColorsNumber();
    ?>
    </body>
    </html>

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Pensandoci bene. C'è forse un modo più veloce....

  5. #5
    Utente di HTML.it L'avatar di PaoDJ
    Registrato dal
    Oct 2001
    Messaggi
    273
    Soluzione troppo dispendiosa quella di controllare pixel per pixel... non è possibile di vedere quali colori sono allocati della tavolozza della jpeg?

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Originariamente inviato da PaoDJ
    Soluzione troppo dispendiosa quella di controllare pixel per pixel... non è possibile di vedere quali colori sono allocati della tavolozza della jpeg?
    E a quello che stavo pensando nel mio ultimo post.

  7. #7
    Utente di HTML.it L'avatar di PaoDJ
    Registrato dal
    Oct 2001
    Messaggi
    273
    La cosa da capire è: la jpeg ha una tavolozza?

    Perche la gif ce l'ha di sicuro ma la jpeg non ricordo...

  8. #8
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Ho fatto una prova con la funzione imagecolorstotal ed un'immagine .jpg. Risultato .... 0 !!!!

  9. #9
    Utente di HTML.it L'avatar di PaoDJ
    Registrato dal
    Oct 2001
    Messaggi
    273
    Lo so, è appunto quello il problema. Temo ce le jpeg non abbiano una tavolozza...

  10. #10
    covertire prima l'immagine con imagetruecolortopalette ?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.