IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[ImageMagick] Couleur plus foncée ? [Sources]


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut [ImageMagick] Couleur plus foncée ?
    Bonjour à tous !

    Je planche sur un sujet que je ne connais pas du tout... : Les couleurs en php.

    Voila, j'ai une couleur stockée dans une variable en format rvb (ex: 005436).
    Je souhaiterai par un petit tour de passe passe la transformer en une couleur identique mais plus foncée.
    J'ai donc regardé un peu dans photoshop comment cela fonctionnait.

    imaginons un rouge :
    990000. Si je le fonce : cela decremente uniquement les bits du rouge mais pas le reste...
    donc 980000 970000 960000 ...
    idem pour le reste...
    Je voulais donc savoir si quelqu'un connaissait un petit algo ou un bout de code capable de faire cela SVP ?
    Merci d'avance !
    @++

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut
    euhhh en fait j'ai trouvé la solution....je vous posterai la fonction des que je l'aurais ecrite ^^

    pour resumer : il faut decouper la couleur pour separer le R, V, B puis decrementer ou incrementer les valeurs.
    vala vala ! à bientot pour la fonction !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut
    Ca y est ! j'ai réussi à vaincre enfin les problemes de calculs hexadecimaux que je n'avais encore jamais pratiqués en php.
    Pour ceux que cela interresse voici une fonction qui peut etre utile.

    NOM : Couleur
    PARAMETRES :
    $couleur : couleur de reference sans # devant
    $sens : prend pour valeur -1 ou 1. -1 = foncer la couleur, 1 = eclaircir la couleur.
    $facteur : nombre d'iterations pour foncer. Si vous mettez 1, la couleur changera très légerement, et plus ca augmente plus ça change la couleur.

    RETOURNE : $couleur : retourne la couleur d'entrée plus foncée ou plus claire sans le # devant.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    function couleur($couleur,$sens,$facteur)
    	{
    	$R=hexdec(substr($couleur, 0, 2));
    	$V=hexdec(substr($couleur, 2, 2));
    	$B=hexdec(substr($couleur, 4, 2));
     
    	if ((($R!=0)&&($sens!=-1))||(($R!=255)&&($sens!=1)))
    		{
    		if ($sens==-1)
    			{
    			if ($R>$facteur)
    				$R-=$facteur;
    			else
    				$R=0;
    			}
    		else if($sens==1)
    			{
    			if ($R<(255-$facteur))
    				$R+=$facteur;
    			else
    				$R=255;
    			}
    		}
     
    	if ((($V!=0)&&($sens!=-1))||(($V!=255)&&($sens!=1)))
    		{
    		if ($sens==-1)
    			{
    			if ($V>$facteur)
    				$V-=$facteur;
    			else
    				$V=0;
    			}
    		else if($sens==1)
    			{
    			if ($V<(255-$facteur))
    				$V+=$facteur;
    			else
    				$V=255;
    			}
    		}
     
    	if ((($B!=0)&&($sens!=-1))||(($B!=255)&&($sens!=1)))
    		{
    		if ($sens==-1)
    			{
    			if ($B>$facteur)
    				$B-=$facteur;
    			else
    				$B=0;
    			}
    		else if($sens==1)
    			{
    			if ($B<(255-$facteur))
    				$B+=$facteur;
    			else
    				$B=255;
    			}
    		}
    	if ($R<16)
    		$R='0'.dechex($R);
    	else
    		$R=dechex($R);
    	if ($V<16)
    		$V='0'.dechex($V);
    	else
    		$V=dechex($V);
    	if ($B<16)
    		$B='0'.dechex($B);
    	else
    		$B=dechex($B);
    	$couleur2=$R.$V.$B;
    	return($couleur2);}

    Voila voila ! donnez moi vos avis si vous souhaitez, ça ne peut que m'etre benefique.
    @++

  4. #4
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut!

    Si tu veux, je possède l'algo pour modifier la luminosité / la teinte / la saturation d'une couleur / d'une image.
    Je possède aussi un algo pour modifier le contraste d'une image et d'un filtre d'anti-aliasing rapide.
    Je les ai codé en Javascript, mais la traduction en PHP est tout à fait envisageable.

    à+
    De retour parmis vous après 10 ans!!

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut
    Salut sub !

    Merci pour ta proposition mais en fait je cherche un code php pour une couleur sans parler d'image. Le code que j'ai mis au dessus fonctionne bien et me suffit ^^

    Par contre je viens de réediter ma fonction car il y avait quelques aberations dedans .... ^^

    Voila voila !
    merci quand meme !
    @++

  6. #6
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Voici comment je code ta fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function SetBright($color,$bright){
     
     $color=substr($color,-6);
     $bgr=explode('x',wordwrap($color,2,'x',3));
     $color='';
     for($i=0;$i<=2;$i++){
      $bgr[$i]=hexdec($bgr[$i]);
      $bgr[$i]=$bgr[$i]+$bright;
      if($bgr[$i]<0) $bgr[$i]=0;
      if($bgr[$i]>255) $bgr[$i]=255;
      $color.=StrToUpper(substr('0'.dechex($bgr[$i]),-2));
     }
     return '#'.$color;
     
    }
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo @SetBright('#FF0122',-10);  // affiche #F50018
    Tu peux aussi ajouter un test regex pour vérifier qu'il sagit bien d'une couleur hexa en entréé de la fonction si tu veux... Bref, j'espère que ça te permettra de progresser. Si tu as des questions, n'hésite pas!
    à+
    De retour parmis vous après 10 ans!!

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut
    perfecto subzero ^^
    Merci bien ça rccourci bien le code !
    merci !
    @++

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 17
    Points : 19
    Points
    19
    Par défaut
    Bonjour

    Je chercher une fonction comme celle la pour coupler à une autre fonction permettant d'ajuster la couleur de fond suivant la couleur d'ecriture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    function SetBright($color,$bright){
     
    	$color=ereg_replace("#","",$color);
    	$bgr=explode('x',wordwrap($color,2,'x',3));
    	$color='';
    	for($i=0;$i<=2;$i++){
    		$bgr[$i]=hexdec($bgr[$i]);
    		$bgr[$i]=$bgr[$i]+$bright;
    		if($bgr[$i]<0) $bgr[$i]=0;
    		if($bgr[$i]>255) $bgr[$i]=255;
    		$color.=StrToUpper(substr('0'.dechex($bgr[$i]),-2));
    	}
    	return $color;
     
    }
     
    function calculratio($colora,$colorb){
    	$colora=ereg_replace("#","",$colora);
    	$colorb=ereg_replace("#","",$colorb);
     
    	//convertnio décimal
    	$Srgb[0][0]=hexdec($colora[0].$colora[1]);
    	$Srgb[0][1]=hexdec($colora[2].$colora[3]);
    	$Srgb[0][2]=hexdec($colora[4].$colora[5]);
     
    	$Srgb[1][0]=hexdec($colorb[0].$colorb[1]);
    	$Srgb[1][1]=hexdec($colorb[2].$colorb[3]);
    	$Srgb[1][2]=hexdec($colorb[4].$colorb[5]);
     
     
     
    	for ($i=0 ; $i<2 ; $i++) {
    		for ($j=0 ; $j<3; $j++) {
    			$x=$Srgb[$i][$j] ;
    			$Normalized[$i][$j]=$x <=0.03928 ?	$x /12.92 :	pow((($x+0.055)/1.055),2.4) ;
    		}
    		$L[$i]=0.2126*$Normalized[$i][0]+0.7152*$Normalized[$i][1]+0.0722*$Normalized[$i][2] ;
    	}
    	if ($L[1] > $L[0]) {
    		$temp=$L[0] ;
    		$L[0]=$L[1] ;
    		$L[1]=$temp ;
    	}
     
    	$diff=((round(($L[0]+0.05)/($L[1]+0.05))*10)/10);
     
    	$contra=abs($Srgb[0][0]-$Srgb[1][0])+abs($Srgb[0][1]-$Srgb[1][1])+abs($Srgb[0][2]-$Srgb[1][2]) ;
    	//echo $contra." : ".$diff. "<br>";
     
    	if( $diff>6 && $contra>500)
    			return $colorb;
    	else{
    		if($Srgb[0][0]>125   || $Srgb[0][1]>125  || $Srgb[0][2]>125)
    			$newcolor=SetBright($colorb,-1);
    		else
    			$newcolor=SetBright($colorb,1);
     
    		return calculratio($colora,$newcolor);
    	}
     
    }
    colora la couleur d'écriture
    colorb la couleur de fond
    La fonction retourne la couleur de fond adapté en plus ou moin clair suivant la couleur ecriture.
    J'ai utiliser plusieru calcule que j'ai prid ici
    http://gmazzocato.altervista.org/col....php?lingua=fr
    en javascript et retranscrite.
    Je poste juste si sa peu aider quelqu'un qui cherche quelechose dans ce genre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/04/2015, 16h24
  2. Comment savoir si une couleur est foncée ?
    Par Alec6 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 07/09/2007, 10h09
  3. tcolor plus foncée ou plus claire
    Par butch dans le forum Delphi
    Réponses: 3
    Dernier message: 06/07/2007, 13h27
  4. [ImageMagick] Couleur transparente image png
    Par f56bre dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 12/02/2007, 07h44
  5. [ImageMagick] Couleur dominante d'une image
    Par matique dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 03/07/2006, 15h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo