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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Marca de agua automatica para todo un directorio sin modificar imagen [PHP-GD]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Marca de agua automatica para todo un directorio sin modificar imagen [PHP-GD]  (Leído 5,748 veces)
Castg!
Wiki

Desconectado Desconectado

Mensajes: 1.191



Ver Perfil WWW
Marca de agua automatica para todo un directorio sin modificar imagen [PHP-GD]
« en: 28 Enero 2011, 01:39 am »

    Esta vez hice una funcion simple con GD que copia una imagen "marcadeagua" en toda imagen del servidor o determinado directorio. Aunque seguramente hay varios scripts de como agregar una marca de agua con GD, practicamente lo que me propuse esta vez era que al ver las imagenes del directorio
/watermark las vea con una marca de agua. Esto es por ejemplo, en algun tipo de foro o similar, los visitantes vean con marca de agua las imagenes, pero usuarios registrados y logeados las vean limpias. Esta vez hice la funcion y la magia es del .htaccess, pero con una simple comprobacion de cookies se puede utilizar o no esta funcion. Les dejo el codigo php y .htaccess y un link a mi pagina donde pueden ver el ejemplo (lo unico que yo no me propuce a hacer el tema del logeo, unicamente aplicar la marca de agua al momento de la peticion de la imagen).

Acepta jpg, gif y png como imagen limpia, pero con la marca de agua se imprimen siempre en jpeg por una cuestion de comodidad. Ademas, tiene la posibilidad de distintas ubicaciones de la marca de agua:
  • Arriba a la izquierda (0)


  • Abajo a la izquierda (1)


  • Arriba a la derecha (2)


  • Abajo a la derecha (3)


  • Centro (4)


  • Por toda la imagen ('repeat'/default)






Citar
marcadeagua.php
[/list]
Código
  1. /*********************************
  2. ------------------------------------------------------
  3. ----------Archivo: marcadeagua.php----------
  4. ------------------------------------------------------
  5. -----------------Creador: Castg!----------------
  6. ------------------------------------------------------
  7. *********************************/
  8. function imagecreatefromfile($flotaImage) {
  9. $flotaMime = getimagesize($flotaImage);
  10. $flotaMime = $flotaMime['mime'];
  11. switch($flotaMime){
  12. case 'image/png':
  13. $image = imagecreatefrompng($flotaImage);
  14. break;
  15. case 'image/jpeg':
  16. $image = imagecreatefromjpeg($flotaImage);
  17. break;
  18. case 'image/gif':
  19. $image = imagecreatefromgif($flotaImage);
  20. break;
  21. default:
  22. die("Archivo no soportado");
  23. }
  24. return $image;
  25. }
  26. function waterMark($flotaDst,$flotaSrc,$flotaPos='repeat') { //imagen limpia, marca de agua, tipo de posision de dicha marca
  27. if(!in_array($flotaPos,array('0','1','2','3','4','repeat'))) die('Wrong position');
  28. $fileSize=getimagesize($flotaDst);
  29. $mimes=array('image/png','image/jpeg','image/gif');
  30. if(is_file($flotaDst)&&in_array($fileSize['mime'],$mimes)) {
  31. $cleanImage=imagecreatefromfile($flotaDst);
  32. $water=imagecreatefrompng($flotaSrc);
  33. imagealphablending($water,true);
  34. imagesavealpha($water,true);
  35. $filesSize=array(
  36. 'clean'=>array(
  37. imagesx($cleanImage),
  38. imagesy($cleanImage)
  39. ),
  40. 'water'=>array(
  41. imagesx($water),
  42. imagesy($water)
  43. )
  44. );
  45. $position = array(
  46. array(0,0),
  47. array(0,$filesSize['clean'][1]-$filesSize['water'][1]),
  48. array($filesSize['clean'][0]-$filesSize['water'][0],0),
  49. array($filesSize['clean'][0]-$filesSize['water'][0],$filesSize['clean'][1]-$filesSize['water'][1]),
  50. array(($filesSize['clean'][0]-$filesSize['water'][0])/2,($filesSize['clean'][1]-$filesSize['water'][1])/2)
  51. );
  52. if(is_numeric($flotaPos)) {
  53. imagecopy($cleanImage,$water,$position[$flotaPos][0],$position[$flotaPos][1],0,0,$filesSize['water'][0],$filesSize['water'][1]);
  54. } elseif($flotaPos=='repeat') {
  55. $repeat=array(
  56. 'x'=>ceil($filesSize['clean'][0]/$filesSize['water'][0]),
  57. 'y'=>ceil($filesSize['clean'][1]/$filesSize['water'][1])
  58. );
  59. for($x=1;$x<=$repeat['x'];$x++) {
  60. for($y=1;$y<=$repeat['y'];$y++) {
  61. imagecopy($cleanImage,$water,(($x-1)*$filesSize['water'][0]),(($y-1)*$filesSize['water'][1]),0,0,$filesSize['water'][0],$filesSize['water'][1]);
  62. }
  63. }
  64. }
  65. header("Content-type: image/jpeg");
  66. imagejpeg($cleanImage,false,90);
  67. imagedestroy($cleanImage);
  68. imagedestroy($water);
  69. }
  70. }
  71. $file=(isset($_GET['f'])&&!empty($_GET['f']))?str_replace(array('..','/'),'scuanck',$_GET['f']):'index.jpeg';
  72. waterMark($file,'water.png');

Citar
.htaccess
Código
  1. #.htaccess mod-rewrite para marcadeagua.php
  2. RewriteCond %{REQUEST_FILENAME} -f
  3. RewriteCond %{REQUEST_FILENAME} !(marcadeagua.php|water.png)
  4. RewriteEngine on
  5. RewriteBase /watermark
  6. RewriteRule ^(.*)$ marcadeagua.php?f=$1



otros ejemplos en mi server




« Última modificación: 28 Enero 2011, 01:41 am por Castg! » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
marca de agua!!!!!!!!!
Multimedia
pepaloka86 2 2,688 Último mensaje 23 Junio 2005, 11:55 am
por pepaloka86
Marca de Agua de TMPGenc
Multimedia
lecaro 1 3,195 Último mensaje 25 Enero 2008, 01:57 am
por Songoku
Ayuda: Marca de Agua Transparente !!
PHP
Diabliyo 2 5,171 Último mensaje 9 Marzo 2010, 16:03 pm
por Diabliyo
Marca De agua para jpegcam
Desarrollo Web
david1467 1 2,727 Último mensaje 3 Agosto 2011, 18:35 pm
por Nakp
Tetris como imagen de marca para unos preservativos
Noticias
wolfbcn 1 1,816 Último mensaje 4 Noviembre 2012, 13:50 pm
por crazykenny
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines