Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Marca de agua

Estas en el tema de Marca de agua en el foro de PHP en Foros del Web. Buenas, Soy nuevo en el foro ( o eso creo, porque recuerdo que tenia una cuenta... pero bueno ). Estoy teniendo problemas con el tema ...
  #1 (permalink)  
Antiguo 19/09/2013, 02:02
 
Fecha de Ingreso: septiembre-2013
Mensajes: 8
Antigüedad: 10 años, 7 meses
Puntos: 0
Marca de agua

Buenas,

Soy nuevo en el foro ( o eso creo, porque recuerdo que tenia una cuenta... pero bueno ).

Estoy teniendo problemas con el tema de las marcas de agua, actualmente tengo esta función:
Código:
function watermark_image ($source_file, $source_watermark, $destination_file) {
	//$SourceFile is source of the image file to be watermarked
	//$WaterMarkText is the text of the watermark
	//$DestinationFile is the destination location where the watermarked images will be placed
	 
	//Delete if destinaton file already exists
	//@unlink($destination_file);
	 
	//This is the vertical center of the image
	list($width, $height) = getimagesize($source_file);
	
	$image = imagecreatefromjpeg($source_file);
	
	$watermark = imagecreatefrompng( $source_watermark );
	list($src_width, $src_height) = getimagesize($source_watermark);
	$top = ($height/2)-($src_height/2);
	$left = ($width/2)-($src_width/2);
	 
	imagecopyresampled($image, $watermark, $left, $top, 0, 0, $src_width, $src_height, $src_width, $src_height);
	 
	if ($destination_file<>'') {
	 
		imagejpeg($image, $destination_file, 100);
	 
	} else {
	 
		header('Content-Type: image/jpeg');
		imagejpeg($image, null, 100);
	 
	};
	 
	imagedestroy($image);
	imagedestroy($watermark);
}
Esta función lo que hace es a partir del centro de la imagen sobre la que se quiere acoplar la marca de agua, se centra ésta última. El problema es que cuando se inserta una imagen muy pequeña la marca de agua queda muy estirada...

A lo que quiero llegar es que he visto en sitios como Airbnb que tienen las marcas de agua siempre escaladas a la imagen, de forma que si la imagen es más pequeña que la marca de agua, ésta se escala a la imagen... no sé si me explico.

El tema es que tengo un lío en la cabeza porque no encuentro la forma de hacerlo.

Gracias
  #2 (permalink)  
Antiguo 19/09/2013, 20:12
Mariuch
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Marca de agua

Acá te "devuelvo" tu código con algunas correcciones. Para escalar la imagen, necesitas usar un poco de GD Library. Acá te explico algunas cosas básicas. Espero que te sirva!

Código PHP:
<?php
    
function watermark_image ($source_file$source_watermark$destination_file) {
        list(
$width$height) = getimagesize($source_file);
        
        
$image imagecreatefromjpeg($source_file);
        
        
$watermark imagecreatefrompng$source_watermark );
        list(
$src_width$src_height) = getimagesize($source_watermark);

                
// Primero que nada necesitas establecer un ancho y alto máximo permitidos para tu marca de agua. En este caso puse 200px * 200px pero la medida la podés cambiar a tu conveniencia
        
$max_ancho 200 ;
        
$max_alto 200 ;

                
// En cuanto a las medidas proporcionales, se obtienen con una serie de fórmulas pre-establecidas que acá adapté para tu código

        
$x_ratio $max_ancho $src_width ;
        
$y_ratio $max_alto $src_height ;

        if( 
$src_width <= $max_ancho && $src_height <= $max_alto ){
            
$anchoFinal $src_width ;
            
$altoFinal $src_height ;
        } else if( 
$src_width $max_ancho ){
            
$altoFinal ceil$x_ratio $src_height ) ;
            
$anchoFinal $max_ancho 
        } else if( 
$src_height $max_alto ){
            
$anchoFinal ceil$y_ratio $src_width ) ;
            
$altoFinal $max_alto 
        }

// Como podrás ver, si el ancho y el alto no exceden los tamaños máximos, las medidas originales serán respetadas, y sino se modificarán proporcionalmente
         
        
imagecopyresampled($image$watermark0000$anchoFinal$altoFinal$src_width$src_height);
         
        if (
$destination_file<>'') {
         
            
imagejpeg($image$destination_file100);
         
        } else {
         
            
header('Content-Type: image/jpeg');
            
imagejpeg($imagenull100);
         
        };
         
        
imagedestroy($image);
        
imagedestroy($watermark);
    }
?>
  #3 (permalink)  
Antiguo 02/10/2013, 05:03
 
Fecha de Ingreso: septiembre-2013
Mensajes: 8
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Marca de agua

Buenas Mariuchi, siento contestarte tan tarde pero no se por qué razón tenía tu respuesta en la carpeta de SPAM...

El script que me pasaste funciona perfectamente, gracias!

Etiquetas: agua, marca
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:05.