Skip to content
Extraits de code Groupes Projets
Valider 6e903f6c rédigé par ARNO*'s avatar ARNO*
Parcourir les fichiers

Les fonctions de traitement d'image preservent la transparence. Attention: les...

Les fonctions de traitement d'image preservent la transparence. Attention: les GIF deviennent des PNG.
parent 7a51c529
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -916,6 +916,8 @@ function valeurs_image_trans($img, $effet, $forcer_format = false) {
if (ereg("\.(gif|jpg|png)$", $fichier, $regs)) {
$terminaison = $regs[1];
$terminaison_dest = $terminaison;
if ($terminaison == "gif") $terminaison_dest = "png";
}
if ($forcer_format) $terminaison_dest = $forcer_format;
......@@ -953,11 +955,14 @@ function valeurs_image_trans($img, $effet, $forcer_format = false) {
}
function image_flip_vertical($im)
// Transforme l'image en PNG transparent
// alpha = 0: aucune transparence
// alpha = 127: completement transparent
function image_alpha($im, $alpha = 63)
{
include_ecrire('inc_logos.php3');
$image = valeurs_image_trans($im, "flip_v");
$image = valeurs_image_trans($im, "alpha-$alpha", "png");
if (!$image) return("");
$x_i = $image["largeur"];
......@@ -969,12 +974,37 @@ function image_flip_vertical($im)
$creer = $image["creer"];
if ($creer) {
// Creation de l'image en deux temps
// de facon a conserver les GIF transparents
$im = $image["fonction_imagecreatefrom"]($im);
$im2 = imagecreatetruecolor($x_i, $y_i);
@imagealphablending($im2, false);
@imagesavealpha($im2,true);
$color_t = ImageColorAllocateAlpha( $im2, 255, 255, 255 , 127 );
imagefill ($im2, 0, 0, $color_t);
imagecopy($im2, $im, 0, 0, 0, 0, $x_i, $y_i);
$im_ = imagecreatetruecolor($x_i, $y_i);
imagealphablending ($im_, FALSE );
imagesavealpha ( $im_, TRUE );
for ($x = 0; $x < $x_i; $x++) {
for ($y = 0; $y < $y_i; $y++) {
imagecopy($im_, $im, $x_i - $x - 1, $y, $x, $y, 1, 1);
$rgb = ImageColorAt($im2, $x, $y);
if (function_exists(imagecolorallocatealpha)) {
$a = ($rgb >> 24) & 0xFF;
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$a_ = $alpha + $a - round($a*$alpha/127);
$rgb = imagecolorallocatealpha($im_, $r, $g, $b, $a_);
}
imagesetpixel ( $im_, $x, $y, $rgb );
}
}
$image["fonction_image"]($im_, "$dest");
......@@ -989,14 +1019,11 @@ function image_flip_vertical($im)
return "<img src='$dest'$tags />";
}
// Transforme l'image en PNG transparent
// alpha = 0: aucune transparence
// alpha = 127: completement transparent
function image_alpha($im, $alpha = 63)
function image_flip_vertical($im)
{
include_ecrire('inc_logos.php3');
$image = valeurs_image_trans($im, "alpha-$alpha", "png");
$image = valeurs_image_trans($im, "flip_v");
if (!$image) return("");
$x_i = $image["largeur"];
......@@ -1010,22 +1037,18 @@ function image_alpha($im, $alpha = 63)
if ($creer) {
$im = $image["fonction_imagecreatefrom"]($im);
$im_ = imagecreatetruecolor($x_i, $y_i);
imagealphablending ($im_, FALSE );
imagesavealpha ( $im_, TRUE );
@imagealphablending($im_, false);
@imagesavealpha($im_,true);
$color_t = ImageColorAllocateAlpha( $im_, 255, 255, 255 , 127 );
imagefill ($im_, 0, 0, $color_t);
for ($x = 0; $x < $x_i; $x++) {
for ($y = 0; $y < $y_i; $y++) {
$rgb = ImageColorAt($im, $x, $y);
if (function_exists(imagecolorallocatealpha)) {
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$rgb = imagecolorallocatealpha($im_, $r, $g, $b, $alpha);
}
imagesetpixel ( $im_, $x, $y, $rgb );
imagecopy($im_, $im, $x_i - $x - 1, $y, $x, $y, 1, 1);
}
}
$image["fonction_image"]($im_, "$dest");
}
......@@ -1038,7 +1061,6 @@ function image_alpha($im, $alpha = 63)
return "<img src='$dest'$tags />";
}
function image_flip_horizontal($im)
{
include_ecrire('inc_logos.php3');
......@@ -1057,10 +1079,15 @@ function image_flip_horizontal($im)
if ($creer) {
$im = $image["fonction_imagecreatefrom"]($im);
$im_ = imagecreatetruecolor($x_i, $y_i);
@imagealphablending($im_, false);
@imagesavealpha($im_,true);
$color_t = ImageColorAllocateAlpha( $im_, 255, 255, 255 , 127 );
imagefill ($im_, 0, 0, $color_t);
for ($x = 0; $x < $x_i; $x++) {
for ($y = 0; $y < $y_i; $y++) {
imagecopy($im_, $im, $x, $y_i - $y - 1, $x, $y, 1, 1);
imagecopy($im_, $im, $x, $y_i - $y - 1, $x, $y, 1, 1);
}
}
$image["fonction_image"]($im_, "$dest");
......@@ -1092,31 +1119,45 @@ function image_nb($im)
// Methode precise
// resultat plus beau, mais tres lourd
/*
// Et: indispensable pour preserver transparence!
if ($creer) {
$im_ = $image["fonction_imagecreatefrom"]($im);
// Creation de l'image en deux temps
// de facon a conserver les GIF transparents
$im = $image["fonction_imagecreatefrom"]($im);
$im_ = imagecreatetruecolor($x_i, $y_i);
@imagealphablending($im_, false);
@imagesavealpha($im_,true);
$color_t = ImageColorAllocateAlpha( $im_, 255, 255, 255 , 127 );
imagefill ($im_, 0, 0, $color_t);
imagecopy($im_, $im, 0, 0, 0, 0, $x_i, $y_i);
for ($x = 0; $x < $x_i; $x++) {
for ($y=0; $y < $y_i; $y++) {
$rgb = ImageColorAt($im_, $x, $y);
$a = ($rgb >> 24) & 0xFF;
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
//echo "[$a]";
$c = round(.299 * $r+ .587 * $g + .114 * $b);
$color = ImageColorAllocate( $im_, $c, $c, $c );
$color = ImageColorAllocateAlpha( $im_, $c, $c, $c , $a );
imagesetpixel ($im_, $x, $y, $color);
}
}
$image["fonction_image"]($im_, "$dest");
}
*/
// Methode avec reduction de couleurs
// moins precise, mais infiniment plus rapide!
if ($creer) {
/* if ($creer) {
$im_ = $image["fonction_imagecreatefrom"]($im);
@imagealphablending($im_, false);
@imagesavealpha($im_,true);
imagetruecolortopalette($im_, true, 256);
for($a=0; $a<imagecolorstotal ($im_); $a++)
......@@ -1129,7 +1170,7 @@ function image_nb($im)
$image["fonction_image"]($im_, "$dest");
}
*/
$class = $image["class"];
if (strlen($class) > 1) $tags=" class='$class'";
$tags = "$tags alt='".$image["alt"]."'";
......@@ -1152,7 +1193,6 @@ function decal_couleur($coul, $gamma) {
// Permet de rendre une image
// plus claire (gamma > 0)
// ou plus foncee (gamma < 0)
// attention: passe l'image en 256 couleurs!
function image_gamma($im, $gamma = 0)
{
include_ecrire('inc_logos.php3');
......@@ -1169,19 +1209,32 @@ function image_gamma($im, $gamma = 0)
$creer = $image["creer"];
if ($creer) {
$im_ = $image["fonction_imagecreatefrom"]($im);
imagetruecolortopalette($im_, true, 256);
// Creation de l'image en deux temps
// de facon a conserver les GIF transparents
$im = $image["fonction_imagecreatefrom"]($im);
$im_ = imagecreatetruecolor($x_i, $y_i);
@imagealphablending($im_, false);
@imagesavealpha($im_,true);
$color_t = ImageColorAllocateAlpha( $im_, 255, 255, 255 , 127 );
imagefill ($im_, 0, 0, $color_t);
imagecopy($im_, $im, 0, 0, 0, 0, $x_i, $y_i);
for ($x = 0; $x < $x_i; $x++) {
for ($y=0; $y < $y_i; $y++) {
$rgb = ImageColorAt($im_, $x, $y);
$a = ($rgb >> 24) & 0xFF;
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
for($a=0; $a<imagecolorstotal ($im_); $a++)
{
$color = ImageColorsForIndex($im_,$a);
$R= decal_couleur($color['red'], $gamma);
$G= decal_couleur($color['green'], $gamma);
$B= decal_couleur($color['blue'], $gamma);
ImageColorSet($im_, $a, $R, $G, $B);
}
$r = decal_couleur($r, $gamma);
$g = decal_couleur($g, $gamma);
$b = decal_couleur($b, $gamma);
$color = ImageColorAllocateAlpha( $im_, $r, $g, $b , $a );
imagesetpixel ($im_, $x, $y, $color);
}
}
$image["fonction_image"]($im_, "$dest");
}
$class = $image["class"];
......@@ -1198,9 +1251,9 @@ function image_gamma($im, $gamma = 0)
// On peut fixer les valeurs RVB
// de la couleur "complementaire" pour forcer une dominante
function decal_couleur_122 ($coul, $val) {
if ($coul < 122) $y = round((($coul - 122) / 122) * $val) + $val;
else if ($coul >= 122) $y = round((($coul - 122) / 123) * (255-$val)) + $val;
function decal_couleur_127 ($coul, $val) {
if ($coul < 127) $y = round((($coul - 127) / 127) * $val) + $val;
else if ($coul >= 127) $y = round((($coul - 127) / 128) * (255-$val)) + $val;
else $y= $coul;
if ($y < 0) $y = 0;
......@@ -1229,25 +1282,39 @@ function image_sepia($im, $rgb = "896f5e")
$creer = $image["creer"];
if ($creer) {
$im_ = $image["fonction_imagecreatefrom"]($im);
imagetruecolortopalette($im_, true, 256);
// Creation de l'image en deux temps
// de facon a conserver les GIF transparents
$im = $image["fonction_imagecreatefrom"]($im);
$im_ = imagecreatetruecolor($x_i, $y_i);
@imagealphablending($im_, false);
@imagesavealpha($im_,true);
$color_t = ImageColorAllocateAlpha( $im_, 255, 255, 255 , 127 );
imagefill ($im_, 0, 0, $color_t);
imagecopy($im_, $im, 0, 0, 0, 0, $x_i, $y_i);
for ($x = 0; $x < $x_i; $x++) {
for ($y=0; $y < $y_i; $y++) {
$rgb = ImageColorAt($im_, $x, $y);
$a = ($rgb >> 24) & 0xFF;
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
for($a=0; $a<imagecolorstotal ($im_); $a++)
{
$color = ImageColorsForIndex($im_,$a);
$r = round(.299 * $r + .587 * $g + .114 * $b);
$g = $r;
$b = $r;
$R= round(.299 * ($color['red'])+ .587 * ($color['green'])+ .114 * ($color['blue']));
$G = $R;
$B = $R;
$R= decal_couleur_122($R, $dr);
$G= decal_couleur_122($G, $dv);
$B= decal_couleur_122($B, $db);
ImageColorSet($im_, $a, $R, $G, $B);
}
$r = decal_couleur_127($r, $dr);
$g = decal_couleur_127($g, $dv);
$b = decal_couleur_127($b, $db);
$color = ImageColorAllocateAlpha( $im_, $r, $g, $b , $a );
imagesetpixel ($im_, $x, $y, $color);
}
}
$image["fonction_image"]($im_, "$dest");
}
$class = $image["class"];
if (strlen($class) > 1) $tags=" class='$class'";
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter