Code solutions to PHP, JS, CSSCode source PHP, JS, CSS

Répandez vos soluces sur la planète

Love me
Solucior » PHP GD IMAGE » Isoler une couleur

Isoler une couleur

06/06/2011 par Dux   -   non-noté

Voici une classe pour isoler une couleur primaire d'une photo au rendu noir et blanc.
Le choix d'utiliser la programmation orienté objet à la place d'une fonction apporte l'avantage de pouvoir ajouter d'autres filtres ou effets d'images par la suite.

Instanciation
$obj = new image_effect();
// Optionnel : Ratio de taille de l'image de travail
// suivant la puissance du serveur et de la qualité de lissage désirée
$obj->multiple = 2;
// Création de l'image de travail
$obj->createimg('flowers.jpg');
// Applique le filtre avec la couleur à isoler (red, green, blue)
$obj->color_isolate('blue');
// Envoi l'image au navigateur ou dans un fichier si le chemin est spécifié
$obj->sendimg( chemin du fichier en option );

Image d'origine de la démonstration

Voir une démonstration de ce script en action :

Ouvrir dans une nouvelle fenêtre     Ouvrir dans la même fenêtre

code source



 
<?php
ini_set
('memory_limit', '128M');


class
image_effect {
   
   
// Size of the tempory image (according to the power of your server)
   
public $multiple = 2;
   
   public function
createimg($url_img) {
   
       
// Detect format and create $img
       
$part = pathinfo($url_img);
       
$ext = strtolower($part['extension']);
       if (
$ext == "jpg" or $ext == "jpeg") $this->img = imagecreatefromjpeg($url_img);
       if (
$ext == "gif") $this->img = imagecreatefromgif($url_img);
       if (
$ext == "png") $this->img = imagecreatefrompng($url_img);
       
       
       
// Create a bigger image for working with 256 colors
       
$this->img2 = $this->img;
       list(
$this->x,$this->y) = getimagesize($url_img);
       
$this->img = imagecreatetruecolor($this->x * $this->multiple, $this->y * $this->multiple);
       
imagecopyresampled($this->img, $this->img2, 0, 0, 0, 0, $this->x * $this->multiple, $this->y * $this->multiple, $this->x, $this->y);
   }
   
   public function
color_isolate($isolate) {
   
       
// calculating and modification in palette color
       
imagetruecolortopalette($this->img, true, 256);
       for(
$i=0; $i<imagecolorstotal( $this->img ); $i++ ) {
           
$c = ImageColorsForIndex( $this->img, $i );
           if (
$c[$isolate] < $c['green'] or $c[$isolate] < $c['blue'] or $c[$isolate] < $c['red']) $c['red'] = $c['green'] = $c['blue'] = ($c['red'] +$c['green'] + $c['blue']) / 3;
           
imagecolorset( $this->img, $i, $c['red'], $c['green'], $c['blue'] );
       }
       
       
// Back to original size with resample
       
imagecopyresampled($this->img2, $this->img, 0, 0, 0, 0, $this->x, $this->y, $this->x * $this->multiple, $this->y * $this->multiple);
       
$this->img = $this->img2;
   }
   
   
   public function
sendimg($path_file = NULL) {
       
// Send
       
header('Content-Type: image/jpeg');
       
imagejpeg($this->img, $path_file, 80 );
       
imagedestroy($this->img);
   }

}


$obj = new image_effect();
// Optional ratio size of the working image
$obj->multiple = 2;
// Create image from file
$obj->createimg('flowers.jpg');
// applies the effect
$obj->color_isolate('blue');
// Send image to browser or to a file if path is defined
$obj->sendimg(path optional);

?>

Noter ce code     |     Copié : 6x

Commentaires pour Isoler une couleur

Aucun commentaire
Ajouter un commentaire Pseudo   Site
ZOOM


Ajuster le taux de couleurs d'une image
Isoler une couleur
Classe image redim et masque rond
Watermark en PHP
Ajuster automatiquement luminosité contraste d'une image