Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => PHP => Mensaje iniciado por: Castg! en 28 Enero 2011, 01:39 AM

Título: Marca de agua automatica para todo un directorio sin modificar imagen [PHP-GD]
Publicado por: Castg! en 28 Enero 2011, 01:39 AM
/watermark (http://castg.com.ar/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:
(http://img121.imageshack.us/img121/3310/water0.jpg)

(http://img717.imageshack.us/img717/3342/water1b.jpg)

(http://img191.imageshack.us/img191/3771/water2m.jpg)

(http://img191.imageshack.us/img191/1443/water3d.jpg)

(http://img824.imageshack.us/img824/7184/water4.jpg)

(http://castg.com.ar/watermark/macro.jpg)






Citarmarcadeagua.php
[/list]
Código (php) [Seleccionar]

/*********************************
------------------------------------------------------
----------Archivo: marcadeagua.php----------
------------------------------------------------------
-----------------Creador: Castg!----------------
------------------------------------------------------
*********************************/
error_reporting(0);
function imagecreatefromfile($flotaImage) {
$flotaMime = getimagesize($flotaImage);
$flotaMime = $flotaMime['mime'];
switch($flotaMime){
case 'image/png':
$image = imagecreatefrompng($flotaImage);
break;
case 'image/jpeg':
$image = imagecreatefromjpeg($flotaImage);
break;
case 'image/gif':
$image = imagecreatefromgif($flotaImage);
break;
default:
die("Archivo no soportado");
}
return $image;
}
function waterMark($flotaDst,$flotaSrc,$flotaPos='repeat') { //imagen limpia, marca de agua, tipo de posision de dicha marca
if(!in_array($flotaPos,array('0','1','2','3','4','repeat'))) die('Wrong position');
$fileSize=getimagesize($flotaDst);
$mimes=array('image/png','image/jpeg','image/gif');
if(is_file($flotaDst)&&in_array($fileSize['mime'],$mimes)) {
$cleanImage=imagecreatefromfile($flotaDst);
$water=imagecreatefrompng($flotaSrc);
imagealphablending($water,true);
imagesavealpha($water,true);
$filesSize=array(
'clean'=>array(
imagesx($cleanImage),
imagesy($cleanImage)
),
'water'=>array(
imagesx($water),
imagesy($water)
)
);
$position = array(
array(0,0),
array(0,$filesSize['clean'][1]-$filesSize['water'][1]),
array($filesSize['clean'][0]-$filesSize['water'][0],0),
array($filesSize['clean'][0]-$filesSize['water'][0],$filesSize['clean'][1]-$filesSize['water'][1]),
array(($filesSize['clean'][0]-$filesSize['water'][0])/2,($filesSize['clean'][1]-$filesSize['water'][1])/2)
);
if(is_numeric($flotaPos)) {
imagecopy($cleanImage,$water,$position[$flotaPos][0],$position[$flotaPos][1],0,0,$filesSize['water'][0],$filesSize['water'][1]);
} elseif($flotaPos=='repeat') {
$repeat=array(
'x'=>ceil($filesSize['clean'][0]/$filesSize['water'][0]),
'y'=>ceil($filesSize['clean'][1]/$filesSize['water'][1])
);
for($x=1;$x<=$repeat['x'];$x++) {
for($y=1;$y<=$repeat['y'];$y++) {
imagecopy($cleanImage,$water,(($x-1)*$filesSize['water'][0]),(($y-1)*$filesSize['water'][1]),0,0,$filesSize['water'][0],$filesSize['water'][1]);
}
}
}
header("Content-type: image/jpeg");
imagejpeg($cleanImage,false,90);
imagedestroy($cleanImage);
imagedestroy($water);
}
}
$file=(isset($_GET['f'])&&!empty($_GET['f']))?str_replace(array('..','/'),'scuanck',$_GET['f']):'index.jpeg';
waterMark($file,'water.png');


Citar.htaccess
Código (apache) [Seleccionar]

#.htaccess mod-rewrite para marcadeagua.php
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} !(marcadeagua.php|water.png)
RewriteEngine on
RewriteBase /watermark
RewriteRule ^(.*)$ marcadeagua.php?f=$1




otros ejemplos en mi server (http://castg.com.ar/watermark/)