elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  CastGD Functions! [Libreria GD]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: CastGD Functions! [Libreria GD]  (Leído 2,116 veces)
Castg!
Wiki

Desconectado Desconectado

Mensajes: 1.191



Ver Perfil WWW
CastGD Functions! [Libreria GD]
« en: 2 Marzo 2010, 20:20 pm »

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
  1. function limit($flotaValueRGB) {
  2. return ($flotaValueRGB > 255) ? 255 : (($flotaValueRGB < 0) ? 0 : $flotaValueRGB);
  3. }



Código
  1. function imageresize($flotaImage, $flotaX, $flotaY) {
  2. $new_image = imagecreatetruecolor($flotaX, $flotaY);
  3. imagecopyresampled($new_image, $flotaImage, 0, 0, 0, 0, imagesx($new_image), imagesy($new_image), imagesx($flotaImage), imagesx($flotaImage));
  4. return $new_image;
  5. }



Código
  1. function imageaddnoise($flotaImage, $flotaAmount = 50, $flotaAlpha = 50) {
  2. $xImage = imagesx($flotaImage);
  3. $yImage = imagesy($flotaImage);
  4. for($y=0;$y<$yImage;$y++) {
  5. for($x=0;$x<$xImage;$x++) {
  6. $rgb = imagecolorat($flotaImage, $x, $y);
  7. $r = ($rgb >> 16) & 0xFF;
  8. $g = ($rgb >> 8) & 0xFF;
  9. $b = $rgb & 0xFF;
  10. $amount = mt_rand(-$flotaAmount, $flotaAmount);
  11. $color = imagecolorallocatealpha($flotaImage,  ($r + $amount > 255) ? 255 : $r + $amount,  ($g + $amount > 255) ? 255 : $g + $amount,  ($b + $amount > 255) ? 255 : $r + $amount, $flotaAlpha);
  12. imagesetpixel($flotaImage, $x, $y, $color);
  13. }
  14. }
  15. }



Código
  1. function imagefillgradient($flotaImage, $flotaGradientMode  = 1, $flotaColor1, $flotaColor2, $flotaInvertColor = false) {
  2. if($flotaInvertColor){ $tempColor = $flotaColor2; $flotaColor2 = $flotaColor1; $flotaColor1 = $tempColor; }
  3. $flotaColor1 = array(
  4. 'r' => ($flotaColor1 >> 16) & 0xFF,
  5. 'g' => ($flotaColor1 >> 8) & 0xFF,
  6. 'b' => $flotaColor1 & 0xFF
  7. );
  8. $flotaColor2 = array(
  9. 'r' => ($flotaColor2 >> 16) & 0xFF,
  10. 'g' => ($flotaColor2 >> 8) & 0xFF,
  11. 'b' => $flotaColor2 & 0xFF
  12. );
  13. $image_x = imagesx($flotaImage);
  14. $image_y = imagesy($flotaImage);
  15. $center_x = $image_x / 2;
  16. $center_y = $image_y / 2;
  17. $add_color = array(
  18. "r" => ($flotaColor1['r'] - $flotaColor2['r']) / $image_x,
  19. "g" => ($flotaColor1['g'] - $flotaColor2['g']) / $image_x,
  20. "b" => ($flotaColor1['b'] - $flotaColor2['b']) / $image_x
  21. );
  22. $x = 0;
  23. $y = 0;
  24. $r = $flotaColor1['r'];
  25. $g = $flotaColor1['g'];
  26. $b = $flotaColor1['b'];
  27. $bgColor = imagecolorallocate($flotaImage, $r, $g, $b);
  28. imagefill($flotaImage, 0, 0, $bgColor);
  29. if($flotaGradientMode!=1 && $flotaGradientMode!=2){
  30. $add_color = array(
  31. "r" => ($flotaColor1['r'] - $flotaColor2['r']) / $center_x,
  32. "g" => ($flotaColor1['g'] - $flotaColor2['g']) / $center_x,
  33. "b" => ($flotaColor1['b'] - $flotaColor2['b']) / $center_x
  34. );
  35. for($i=0;$i<$center_x;$i++) {
  36. $color = imagecolorallocate($flotaImage, $r, $g, $b);
  37. switch($flotaGradientMode) {
  38. case 3:
  39. imagefilledrectangle($flotaImage, $x, $y, $image_x - $x, $image_y - $y, $color);
  40. break;
  41. case 4:
  42. imagefilledellipse($flotaImage, $center_x, $center_x, $image_x - $x, $image_y - $y, $color);
  43. break;
  44. default:
  45. die("Gradiant mode not valid!");
  46. break;
  47. }
  48. $x++;
  49. $y++;
  50. $r += -$add_color['r'];
  51. $g += -$add_color['g'];
  52. $b += -$add_color['b'];
  53. }
  54. } else {
  55. $add_color = array(
  56. "r" => ($flotaColor1['r'] - $flotaColor2['r']) / $image_x,
  57. "g" => ($flotaColor1['g'] - $flotaColor2['g']) / $image_x,
  58. "b" => ($flotaColor1['b'] - $flotaColor2['b']) / $image_x
  59. );
  60. switch($flotaGradientMode) {
  61. case 1:
  62. for($i=0;$i<$image_x;$i++) {
  63. $color = imagecolorallocate($flotaImage, $r, $g, $b);
  64. imageline($flotaImage, $x, 0, $x, $image_y, $color);
  65. $r += -$add_color['r'];
  66. $g += -$add_color['g'];
  67. $b += -$add_color['b'];
  68. $x++;
  69. }
  70. break;
  71. case 2:
  72. for($i=0;$i<$image_y;$i++) {
  73. $color = imagecolorallocate($flotaImage, $r, $g, $b);
  74. imageline($flotaImage, 0, $y, $image_x, $y, $color);
  75. $y++;
  76. $r += -$add_color['r'];
  77. $g += -$add_color['g'];
  78. $b += -$add_color['b'];
  79. }
  80. break;
  81. default:
  82. return false;
  83. }
  84. }
  85. }



Código
  1. function imagegrayscale($flotaImage) {
  2. $xImage = imagesx($flotaImage);
  3. $yImage = imagesy($flotaImage);
  4. for($y=0;$y<$yImage;$y++) {
  5. for($x=0;$x<$xImage;$x++) {
  6. $rgb = imagecolorat($flotaImage, $x, $y);
  7. $r = ($rgb >> 16) & 0xFF;
  8. $g = ($rgb >> 8) & 0xFF;
  9. $b = $rgb & 0xFF;
  10. $rgb = (($r+$g+$b) / 3) + $flotaAmount;
  11. $color = imagecolorallocate($flotaImage, $rgb, $rgb, $rgb);
  12. imagesetpixel($flotaImage, $x, $y, $color);
  13. }
  14. }
  15. }



Código
  1. function imagealternatergb($flotaImage, $flotaMode) {
  2. $xImage = imagesx($flotaImage);
  3. $yImage = imagesy($flotaImage);
  4. for($y=0;$y<$yImage;$y++) {
  5. for($x=0;$x<$xImage;$x++) {
  6. $rgb = imagecolorat($flotaImage, $x, $y);
  7. $r = ($rgb >> 16) & 0xFF;
  8. $g = ($rgb >> 8) & 0xFF;
  9. $b = $rgb & 0xFF;
  10. switch ($flotaMode) {
  11. case bgr:
  12. $color = imagecolorallocate($flotaImage, $b, $g, $r);
  13. break;
  14. case brg:
  15. $color = imagecolorallocate($flotaImage, $b, $r, $g);
  16. break;
  17. case grb:
  18. $color = imagecolorallocate($flotaImage, $g, $r, $b);
  19. break;
  20. case gbr:
  21. $color = imagecolorallocate($flotaImage, $g, $b, $r);
  22. break;
  23. case rbg:
  24. $color = imagecolorallocate($flotaImage, $r, $b, $g);
  25. break;
  26. default:
  27. $color = imagecolorallocate($flotaImage, $r, $g, $b);
  28. break;
  29. }
  30. imagesetpixel($flotaImage, $x, $y, $color);
  31. }
  32. }
  33. }



Código
  1. function imagecolorsaturation($flotaImage, $flotaAmount) {
  2. $flotaAmount = ($flotaAmount > 100) ? 100 : ($flotaAmount < 0) ? 0 : $flotaAmount;
  3. $xImage = imagesx($flotaImage);
  4. $yImage = imagesy($flotaImage);
  5. for($y=0;$y<$yImage;$y++) {
  6. for($x=0;$x<$xImage;$x++) {
  7. $rgb = imagecolorat($flotaImage, $x, $y);
  8. $colors = array(
  9. 'r' => ($rgb >> 16) & 0xFF,
  10. 'g' => ($rgb >> 8) & 0xFF,
  11. 'b' => $rgb & 0xFF
  12. );
  13. $sorted = $colors;
  14. asort($sorted);
  15. $largest_value = array_pop($sorted);
  16. foreach($sorted as $nick => $rgb) {
  17. if($rgb!=$largest_value) {
  18. $percent = round($flotaAmount * ($largest_value - $rgb) / 100);
  19. $colors[$nick] = $rgb + $percent;
  20. $colors[$nick] = ($colors[$nick] > $largest_value) ? $largest_value : $colors[$nick];
  21. }
  22. }
  23. $color = imagecolorallocate($flotaImage, $colors['r'], $colors['g'], $colors['b']);
  24. imagesetpixel($flotaImage, $x, $y, $color);
  25. }
  26. }
  27. }



Código
  1. function imagenegativeefect($flotaImage) {
  2. $xImage = imagesx($flotaImage);
  3. $yImage = imagesy($flotaImage);
  4. for($y=0;$y<$yImage;$y++) {
  5. for($x=0;$x<$xImage;$x++) {
  6. $rgb = imagecolorat($flotaImage, $x, $y);
  7. $r = ($rgb >> 16) & 0xFF;
  8. $g = ($rgb >> 8) & 0xFF;
  9. $b = $rgb & 0xFF;
  10. $color = imagecolorallocate($flotaImage, 255 - $r, 255 - $g, 255 - $b);
  11. imagesetpixel($flotaImage, $x, $y, $color);
  12. }
  13. }
  14. }



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
  1. $im = imageresize($im, 305, 400);

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

para añadir ruido se usa asi:

Código
  1. <?php
  2. require("castgd.php");
  3. header("Content-type: image/jpeg");
  4. $im = imagecreatefromjpeg("http://www.galeriade.com/javidelope/data/media/2/Rosa_Rosa.jpg");
  5. $im = imageresize($im, 305, 400);
  6. $cantidad = 50;   //pueden no ingresarse los valores, pero se usan los por defecto
  7. $transparencia = 50;
  8. imageaddnoise($im, $cantidad, $transparencia);
  9. imagejpeg($im);
  10. ?>

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
  1. <?php
  2. require("castgd.php");
  3. header("Content-type: image/jpeg");
  4. $im = imagecreatetruecolor(250,250);
  5. $rojo = imagecolorallocate($im, 255,0,0);
  6. $naranja = imagecolorallocate($im, 255, 128, 0);
  7. imagefillgradient($im, 1, $rojo, $naranja);
  8. imagejpeg($im);
  9. ?>

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
  1. <?php
  2. require("castgd.php");
  3. header("Content-type: image/jpeg");
  4. $im = imagecreatefromjpeg("http://www.galeriade.com/javidelope/data/media/2/Rosa_Rosa.jpg");
  5. $im = imageresize($im, 305, 400);
  6. $rojo = imagecolorallocate($im, 255,0,0);
  7. $naranja = imagecolorallocate($im, 255, 128, 0);
  8. imagegrayscale($im);
  9. imagejpeg($im);
  10. ?>

y el resultado es:



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

Código
  1. <?php
  2. require("castgd.php");
  3. header("Content-type: image/jpeg");
  4. $im = imagecreatefromjpeg("http://www.galeriade.com/javidelope/data/media/2/Rosa_Rosa.jpg");
  5. $im = imageresize($im, 305, 400);
  6. imagecolorsaturation($im, 50);
  7. imagejpeg($im);
  8. ?>

con cantidad 50:



y por ultimo hasta hoy, negativo:

Código
  1. <?php
  2. require("castgd.php");
  3. header("Content-type: image/jpeg");
  4. $im = imagecreatefromjpeg("http://www.galeriade.com/javidelope/data/media/2/Rosa_Rosa.jpg");
  5. $im = imageresize($im, 305, 400);
  6. imagenegativeefect($im);
  7. imagejpeg($im);
  8. ?>

y resulta:




les dejo una mezcla copada xD:



« Última modificación: 2 Marzo 2010, 20:22 pm por Castg! » En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: CastGD Functions! [Libreria GD]
« Respuesta #1 en: 2 Marzo 2010, 20:25 pm »

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

Despues lo ojeo bien


En línea

Castg!
Wiki

Desconectado Desconectado

Mensajes: 1.191



Ver Perfil WWW
Re: CastGD Functions! [Libreria GD]
« Respuesta #2 en: 2 Marzo 2010, 20:25 pm »

gracias raul ;)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Alternative Replace & Right Functions
Programación Visual Basic
Swellow 6 2,914 Último mensaje 9 Noviembre 2012, 20:46 pm
por Swellow
Problema con functions.php
PHP
Xagutxu 0 1,306 Último mensaje 1 Abril 2013, 20:59 pm
por Xagutxu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines