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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
<?php
////////////////////////Image récupérée d'un URL////////////////////////////////////
if (isset($_GET['url'])) {
$url = str_replace('http://','',$_GET['url']);
} else { die("erreur"); }
$imgname = 'http://' . $url
///////////////////////Traitement//////////////////////////////////////////////////
//Essaye de lire l'image
function LoadJpeg($imgname)
{
$im = imagecreatefromjpeg($imgname);
/* Traitement en cas d'échec */
if(!$im)
{
/* Création d'une image vide */
$im = imagecreatetruecolor(150, 30);
$bgc = imagecolorallocate($im, 255, 255, 255);
$tc = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 150, 30, $bgc);
//On y affiche un message d'erreur
imagestring($im, 1, 5, 5, 'Erreur de chargement ' . $imgname, $tc);
}
return $im;
}
//Chargement de l'image
$img = LoadJpeg($imgname);
//Récupération de la taille de l'image
list($width, $height, $type, $attr) = getimagesize($imgname);
///////////////////////////////////Filtre protanope et deuteranope//////////////////////////////
//Parcours de l'image
$couleur = array(array());
for($i=0;$i<$height;$i++){
for($j=0;$j<$width;$j++){
//Retourne l'index de la couleur du pixel situé aux coordonnées spécifiées, dans l'image.
$color_index = imagecolorat($img, $i, $j);
//Retourne la couleur associée à un index.
$recuperationcouleurs = imagecolorsforindex($img, $color_index);
$couleur[$i][$j]= $recuperationcouleurs;
///////////////////////////////////Protanope//////////////////////////////////
//Calcul des valeurs RVB
$R_prota=$couleur[$i][$j]['red']*0.992052 + 0.003974;
$G_prota=$couleur[$i][$j]['green']*0.992052 + 0.003974;
$B_prota=$couleur[$i][$j]['blue']*0.992052 + 0.003974;
//Calcul des valeurs LMS à partir des valeurs RGB
$L_protanopes = 17.8824*$R_prota + 43.5161*$G_prota + 4.11935*$B_prota;
$M_protanopes = 3.45565*$R_prota + 27.1554*$G_prota+ 3.86714*$B_prota;
$S_protanopes = 0.0299566*$R_prota + 0.184309*$G_prota + 1.46709*$B_prota;
//Calcul des couleurs que voit un protanopes en LMS
$Ld_protanopes = 0*$L_protanopes + 2.02344*$M_protanopes - 2.52581*$S_protanopes;
$Md_protanopes = 0*$L_protanopes + 1*$M_protanopes + 0*$S_protanopes;
$Sd_protanopes = 0*$L_protanopes + 0*$M_protanopes + 1*$S_protanopes;
//Passage du LMS au RGB
$Rd = 0.080944*$Ld_protanopes - 0.130504*$Md_protanopes + 0.116721*$Sd_protanopes;
$Gd = -0.0102485*$Ld_protanopes + 0.0540194*$Md_protanopes - 0.113615*$Sd_protanopes;
$Bd = -0.000365294*$Ld_protanopes - 0.00412163*$Md_protanopes + 0.693513*$Sd_protanopes;
//Retourne un identifiant de couleur, représentant la couleur composée avec les couleurs RGB.
$red = imagecolorallocate($img, $Rd, $Gd, $Bd);
//Dessine un pixel aux coordonnées spécifiées.
imagesetpixel($img,$i,$j,$red);
}
}
//fclose($imgname);
//Affiche l'image
header('Content-Type: image/jpeg');
imagejpeg($img);
imagedestroy($img);
?> |
Partager