CastGD Functions! [Libreria GD]

Iniciado por Castg!, 2 Marzo 2010, 20:20 PM

0 Miembros y 1 Visitante están viendo este tema.

Castg!

bueno, me faltan las funciones para modificar el brillo, contraste y color xD pero no me aguante mas!! jajjaj en este post voy a ir subiendo (si ustedes tienen porfavor subanlas y modifico el titulo) funciones para usar con la libreria gd.

por ahora las que hice fueron para:

  • Para el correcto funcionamiento de estas heramientas es necesario usar una funcion que limita el valor de rgb. osea, si es mayor a 255, que sea 255, y si es menor a 0, que sea 0.
  • Redimensionar imagenes mas facilmente
  • Añadir ruido.
  • Crear un fondo degradado con dos colores. Variadas formas.
  • Desaturar la imagen.
  • Alternar los valores RGB.
  • Modificar la saturacion.
  • Efecto negativo.


son demasiado simplonas, tienen errores de incopatibilidad aveces jajaj.




Código (php) [Seleccionar]
function limit($flotaValueRGB) {
return ($flotaValueRGB > 255) ? 255 : (($flotaValueRGB < 0) ? 0 : $flotaValueRGB);
}





Código (php) [Seleccionar]
function imageresize($flotaImage, $flotaX, $flotaY) {
$new_image = imagecreatetruecolor($flotaX, $flotaY);
imagecopyresampled($new_image, $flotaImage, 0, 0, 0, 0, imagesx($new_image), imagesy($new_image), imagesx($flotaImage), imagesx($flotaImage));
return $new_image;
}





Código (php) [Seleccionar]
function imageaddnoise($flotaImage, $flotaAmount = 50, $flotaAlpha = 50) {
$xImage = imagesx($flotaImage);
$yImage = imagesy($flotaImage);
for($y=0;$y<$yImage;$y++) {
for($x=0;$x<$xImage;$x++) {
$rgb = imagecolorat($flotaImage, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$amount = mt_rand(-$flotaAmount, $flotaAmount);
$color = imagecolorallocatealpha($flotaImage,  ($r + $amount > 255) ? 255 : $r + $amount,  ($g + $amount > 255) ? 255 : $g + $amount,  ($b + $amount > 255) ? 255 : $r + $amount, $flotaAlpha);
imagesetpixel($flotaImage, $x, $y, $color);
}
}
}





Código (php) [Seleccionar]
function imagefillgradient($flotaImage, $flotaGradientMode  = 1, $flotaColor1, $flotaColor2, $flotaInvertColor = false) {
if($flotaInvertColor){ $tempColor = $flotaColor2; $flotaColor2 = $flotaColor1; $flotaColor1 = $tempColor; }
$flotaColor1 = array(
'r' => ($flotaColor1 >> 16) & 0xFF,
'g' => ($flotaColor1 >> 8) & 0xFF,
'b' => $flotaColor1 & 0xFF
);
$flotaColor2 = array(
'r' => ($flotaColor2 >> 16) & 0xFF,
'g' => ($flotaColor2 >> 8) & 0xFF,
'b' => $flotaColor2 & 0xFF
);
$image_x = imagesx($flotaImage);
$image_y = imagesy($flotaImage);
$center_x = $image_x / 2;
$center_y = $image_y / 2;
$add_color = array(
"r" => ($flotaColor1['r'] - $flotaColor2['r']) / $image_x,
"g" => ($flotaColor1['g'] - $flotaColor2['g']) / $image_x,
"b" => ($flotaColor1['b'] - $flotaColor2['b']) / $image_x
);
$x = 0;
$y = 0;
$r = $flotaColor1['r'];
$g = $flotaColor1['g'];
$b = $flotaColor1['b'];
$bgColor = imagecolorallocate($flotaImage, $r, $g, $b);
imagefill($flotaImage, 0, 0, $bgColor);
if($flotaGradientMode!=1 && $flotaGradientMode!=2){
$add_color = array(
"r" => ($flotaColor1['r'] - $flotaColor2['r']) / $center_x,
"g" => ($flotaColor1['g'] - $flotaColor2['g']) / $center_x,
"b" => ($flotaColor1['b'] - $flotaColor2['b']) / $center_x
);
for($i=0;$i<$center_x;$i++) {
$color = imagecolorallocate($flotaImage, $r, $g, $b);
switch($flotaGradientMode) {
case 3:
imagefilledrectangle($flotaImage, $x, $y, $image_x - $x, $image_y - $y, $color);
break;
case 4:
imagefilledellipse($flotaImage, $center_x, $center_x, $image_x - $x, $image_y - $y, $color);
break;
default:
die("Gradiant mode not valid!");
break;
}
$x++;
$y++;
$r += -$add_color['r'];
$g += -$add_color['g'];
$b += -$add_color['b'];
}
} else {
$add_color = array(
"r" => ($flotaColor1['r'] - $flotaColor2['r']) / $image_x,
"g" => ($flotaColor1['g'] - $flotaColor2['g']) / $image_x,
"b" => ($flotaColor1['b'] - $flotaColor2['b']) / $image_x
);
switch($flotaGradientMode) {
case 1:
for($i=0;$i<$image_x;$i++) {
$color = imagecolorallocate($flotaImage, $r, $g, $b);
imageline($flotaImage, $x, 0, $x, $image_y, $color);
$r += -$add_color['r'];
$g += -$add_color['g'];
$b += -$add_color['b'];
$x++;
}
break;
case 2:
for($i=0;$i<$image_y;$i++) {
$color = imagecolorallocate($flotaImage, $r, $g, $b);
imageline($flotaImage, 0, $y, $image_x, $y, $color);
$y++;
$r += -$add_color['r'];
$g += -$add_color['g'];
$b += -$add_color['b'];
}
break;
default:
return false;
}
}
}





Código (php) [Seleccionar]
function imagegrayscale($flotaImage) {
$xImage = imagesx($flotaImage);
$yImage = imagesy($flotaImage);
for($y=0;$y<$yImage;$y++) {
for($x=0;$x<$xImage;$x++) {
$rgb = imagecolorat($flotaImage, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$rgb = (($r+$g+$b) / 3) + $flotaAmount;
$color = imagecolorallocate($flotaImage, $rgb, $rgb, $rgb);
imagesetpixel($flotaImage, $x, $y, $color);
}
}
}





Código (php) [Seleccionar]
function imagealternatergb($flotaImage, $flotaMode) {
$xImage = imagesx($flotaImage);
$yImage = imagesy($flotaImage);
for($y=0;$y<$yImage;$y++) {
for($x=0;$x<$xImage;$x++) {
$rgb = imagecolorat($flotaImage, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
switch ($flotaMode) {
case bgr:
$color = imagecolorallocate($flotaImage, $b, $g, $r);
break;
case brg:
$color = imagecolorallocate($flotaImage, $b, $r, $g);
break;
case grb:
$color = imagecolorallocate($flotaImage, $g, $r, $b);
break;
case gbr:
$color = imagecolorallocate($flotaImage, $g, $b, $r);
break;
case rbg:
$color = imagecolorallocate($flotaImage, $r, $b, $g);
break;
default:
$color = imagecolorallocate($flotaImage, $r, $g, $b);
break;
}
imagesetpixel($flotaImage, $x, $y, $color);
}
}
}





Código (php) [Seleccionar]
function imagecolorsaturation($flotaImage, $flotaAmount) {
$flotaAmount = ($flotaAmount > 100) ? 100 : ($flotaAmount < 0) ? 0 : $flotaAmount;
$xImage = imagesx($flotaImage);
$yImage = imagesy($flotaImage);
for($y=0;$y<$yImage;$y++) {
for($x=0;$x<$xImage;$x++) {
$rgb = imagecolorat($flotaImage, $x, $y);
$colors = array(
'r' => ($rgb >> 16) & 0xFF,
'g' => ($rgb >> 8) & 0xFF,
'b' => $rgb & 0xFF
);
$sorted = $colors;
asort($sorted);
$largest_value = array_pop($sorted);
foreach($sorted as $nick => $rgb) {
if($rgb!=$largest_value) {
$percent = round($flotaAmount * ($largest_value - $rgb) / 100);
$colors[$nick] = $rgb + $percent;
$colors[$nick] = ($colors[$nick] > $largest_value) ? $largest_value : $colors[$nick];
}
}
$color = imagecolorallocate($flotaImage, $colors['r'], $colors['g'], $colors['b']);
imagesetpixel($flotaImage, $x, $y, $color);
}
}
}





Código (php) [Seleccionar]
function imagenegativeefect($flotaImage) {
$xImage = imagesx($flotaImage);
$yImage = imagesy($flotaImage);
for($y=0;$y<$yImage;$y++) {
for($x=0;$x<$xImage;$x++) {
$rgb = imagecolorat($flotaImage, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$color = imagecolorallocate($flotaImage, 255 - $r, 255 - $g, 255 - $b);
imagesetpixel($flotaImage, $x, $y, $color);
}
}
}





Modo de uso:

Como imagen de prueba voy a usar :



pero la voy a redimensionar con mi funcion, para no molestarlos a ustedes y que no este tan grande, lo hago tan simple como :
Código (php) [Seleccionar]
$im = imageresize($im, 305, 400);

como ven, los valores que ingreso son exactamente la mitad.

para añadir ruido se usa asi:

Código (php) [Seleccionar]
<?php
require("castgd.php");
header("Content-type: image/jpeg");
$im imagecreatefromjpeg("http://www.galeriade.com/javidelope/data/media/2/Rosa_Rosa.jpg");
$im imageresize($im305400);
$cantidad 50;   //pueden no ingresarse los valores, pero se usan los por defecto
$transparencia 50;
imageaddnoise($im$cantidad$transparencia);
imagejpeg($im);
imagedestroy($im);
?>


y el resultado es este:



al agregar un fondo degradado, esta fucion se usa igual que "imagefill", osea, no se aplica en una imagen externa.osea, se va a aplicar, pero puede haber errores no deseados...

Código (php) [Seleccionar]
<?php
require("castgd.php");
header("Content-type: image/jpeg");
$im imagecreatetruecolor(250,250);
$rojo imagecolorallocate($im255,0,0);
$naranja imagecolorallocate($im2551280);
imagefillgradient($im1$rojo$naranja);
imagejpeg($im);
imagedestroy($im);
?>


el resultado del modo 1 sin invertir los colres es este:



1 invertido



modo 2 sin invertir



modo 3 sin invertir



modo 3 con invertir



modo 4 sin invertir






la mas simple y facil fue la de escala de grises:

Código (php) [Seleccionar]
<?php
require("castgd.php");
header("Content-type: image/jpeg");
$im imagecreatefromjpeg("http://www.galeriade.com/javidelope/data/media/2/Rosa_Rosa.jpg");
$im imageresize($im305400);
$rojo imagecolorallocate($im255,0,0);
$naranja imagecolorallocate($im2551280);
imagegrayscale($im);
imagejpeg($im);
imagedestroy($im);
?>


y el resultado es:



pero tambien se puede no solo "desaturar" automatico, sino sacar el color de apoco...

Código (php) [Seleccionar]
<?php
require("castgd.php");
header("Content-type: image/jpeg");
$im imagecreatefromjpeg("http://www.galeriade.com/javidelope/data/media/2/Rosa_Rosa.jpg");
$im imageresize($im305400);
imagecolorsaturation($im50);
imagejpeg($im);
imagedestroy($im);
?>


con cantidad 50:



y por ultimo hasta hoy, negativo:

Código (php) [Seleccionar]
<?php
require("castgd.php");
header("Content-type: image/jpeg");
$im imagecreatefromjpeg("http://www.galeriade.com/javidelope/data/media/2/Rosa_Rosa.jpg");
$im imageresize($im305400);
imagenegativeefect($im);
imagejpeg($im);
imagedestroy($im);
?>


y resulta:




les dejo una mezcla copada xD:


raul338

Wow...buenisimo... la mezcla copada esta interesante

Despues lo ojeo bien