Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Images > Imagick
Imagick Forum d'entraide pour l'extension Imagick permettant de manipuler des images en PHP (port de l'API ImageMagick).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/11/2004, 19h25   #1
Membre confirmé
 
Inscription : février 2003
Messages : 771
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : février 2003
Messages : 771
Points : 293
Points : 293
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 !
@++
zax-tfh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2004, 19h34   #2
Membre confirmé
 
Inscription : février 2003
Messages : 771
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : février 2003
Messages : 771
Points : 293
Points : 293
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 !
zax-tfh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2004, 21h50   #3
Membre confirmé
 
Inscription : février 2003
Messages : 771
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : février 2003
Messages : 771
Points : 293
Points : 293
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 :
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.
@++
zax-tfh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2004, 22h54   #4
Expert Confirmé
 
Avatar de Sub0
 
Homme
Inscription : décembre 2002
Messages : 3 468
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39

Informations forums :
Inscription : décembre 2002
Messages : 3 468
Points : 3 115
Points : 3 115
Envoyer un message via MSN à Sub0 Envoyer un message via Skype™ à Sub0
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.

à+
Sub0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2004, 00h28   #5
Membre confirmé
 
Inscription : février 2003
Messages : 771
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : février 2003
Messages : 771
Points : 293
Points : 293
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 !
@++
zax-tfh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2004, 04h37   #6
Expert Confirmé
 
Avatar de Sub0
 
Homme
Inscription : décembre 2002
Messages : 3 468
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39

Informations forums :
Inscription : décembre 2002
Messages : 3 468
Points : 3 115
Points : 3 115
Envoyer un message via MSN à Sub0 Envoyer un message via Skype™ à Sub0
Voici comment je code ta fonction :
Code :
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 :
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!
à+
Sub0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2004, 15h21   #7
Membre confirmé
 
Inscription : février 2003
Messages : 771
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : février 2003
Messages : 771
Points : 293
Points : 293
perfecto subzero ^^
Merci bien ça rccourci bien le code !
merci !
@++
zax-tfh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2009, 13h42   #8
Futur Membre du Club
 
Inscription : juillet 2007
Messages : 17
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 17
Points : 17
Points : 17
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 :
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.
neoray est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h32.


 
 
 
 
Partenaires

Hébergement Web