Ver Mensaje Individual
  #9 (permalink)  
Antiguo 10/09/2005, 09:34
huayayo
 
Fecha de Ingreso: abril-2004
Mensajes: 56
Antigüedad: 20 años
Puntos: 0
HOLA ESCOFFIE
estuve revisando este codigo y está muy bueno. me ha servido mucho
pero tengo una pregunta:

Yo necesito que todas las imagenes del sitio queden de 250 x 250, el problema es que si subo una imagen de por ej. 1280 x 960 me la redimensiona proporcionalmente a 250 x 188 .

¿Como lo puedo hacer para que me la ajuste a 250 x 250?

intenté cambiando
$altura = round($dimensiones[1] / $ratio);
por
$altura =250;
pero lo que hace es estirar la imagen por lo cual no me sirve.


como la imagen de 250 x 188 es mas pequeña que 250 x 250 debería centrarla y crear una nueva imagen de 250 x 250 con fondo blanco conteniendo a la de 250 x 188... ¿me explico o no?

incluso hice una marca de agua en formato png que es un borde de 1 pixel y el nombre de mi sitio web que se aplica correctamente cuando las fotos son cuadradas.

ojala alguien me pueda ayudar

PD: En deremate (http://www.deremate.cl/accdb/ViewItem.asp?IDI=9880397&page=19) si se dan cuenta la foto del atril es mas ancha que alta por lo cual el espacio sobrante está relleno con blanco.

¿como lo hago?

Cita:
Iniciado por Escoffie
Hola ferranWeb:

Te dejo un code que es bastante parametrizable. Acepta jpg, png y gif, y calcula el alto para hacerlo proporcional al ancho que elijas. Además si así lo deseas, te devuelve 2 versiones, una grande y una chica, por ejemplo, y además puedes usar un archivo png como marca de agua.

La función devuelve el URL de las imágenes, como para que lo guardes en tu base de datos.

Espero que te sirva.

Código PHP:
##################################################################################################
# BEGIN imgResample2
# ------------------------------------------------------------------------------------------------
# DESCRIPCIÓN:
# Altera el tamaño de una imagen al subirse desde una forma ajustándola a una altura o anchura máxima,
# preservando las proporciones. Opcionalmnete puede señalarse una imagen PNG para que sirva com marca de agua
# Genera una imagen Thumbnail también.
# Acepta imágenes JPG, GIF o PNG y el resultado del proceso se copia al directorio actual como una imagen
# DEVUELVE: 
# Nada
# PARÁMETROS:
# $campo    ->    string, obligatorio; nombre del campo de tipo File del que tomará los valores de la imagen a procesar
# $dir        ->    string, opcional; ruta donde se subirá el archivo. Si se deja vacío lo sube al directorio actual
# $anchura    ->    número, opcional; anchura máxima permitida para las imágenes a fullsize. Valor predeterminado es 250 px
# $anchura_thumb -> número, opcional; anchura máxima permitida para las imágenes thumbnail. Valor predeterminado es 100 px
# $watermark->    string URL a un archivo PNG, opcional; si existe, incrusta una marca de agua en el fullsize
# $watermark_thumb-> string URL a un archivo PNG, opcional; si existe, incrusta una marca de agua en el thumbnail
# $pos        ->    string, opcional, predeterminado = "L-T"; posición horizontal de la marca de agua. Valores permitidos: "L" para izquierda o "R" para derecha, "T" para arriba o "B" para abajo. Separar con un - los valores horizontales y verticales
# $wmdist    ->    número, opcional, predeterminado = 0; padding en pixeles para el Watermark
# $c1        ->    número, opcional, predeterminado = 85; calidad del jpg de la imagen grande
# $c2        ->    número, opcional, predeterminado = 90; calidad del jpg de la imagen thumbnail
#
# EJEMPLO:
# imgResample2('img1'); // copia la imagen del campo img1 al directorio actual
function imgResample2 ($campo$dir=""$anchura=250$anchura_thumb=100$watermark=""$watermark_thumb=""$pos="L-T"$wmdist=0$c1=95$c2=97){

    if(
$_FILES[$campo]['name']!=''){
    
    
//Si el campo está lleno, es decir, si se subió una foto...

        //crea los directorios necesarios
        
if($dir!=""){
            if(!
file_exists($dir)) mkdir($dir);
        }
        
//asigna las variables        
        
$name=$_FILES[$campo]['name'];
        
$type=$_FILES[$campo]['type'];
        
$image_name $name;
        
        
//Imagen original en el servidor
        
$temp=$_FILES[$campo]['tmp_name']; 
        
        
//Objeto con el que trabajará el programa
        
if($type=="image/pjpeg"){
            
$img = @imagecreatefromjpeg($temp) or die("No se encuentra la imagen $image_name<br>\n"); 
        }
        if(
$_FILES[$campo]['type']=="image/gif"){
            
$img = @imagecreatefromgif($temp) or die("No se encuentra la imagen $image_name<br>\n");
            
$image_name str_replace(".gif"".jpg"$image_name);
        }
        if(
$_FILES[$campo]['type']=="image/x-png"){
            
$img = @imagecreatefrompng($temp) or die("No se encuentra la imagen $image_name<br>\n");
            
$image_name str_replace(".png"".jpg"$image_name);
        }
        
//Para que acepte la transparencia del PNG
        
imagealphablending($imgtrue);
        
//INICIA PROCESO
            
$dimensiones getimagesize($temp); //Dimensiones originales de la imagen
            
$ratio = ($dimensiones[0] / $anchura);
            
$altura round($dimensiones[1] / $ratio);
            
$image imagecreatetruecolor($anchura,$altura); //crea la nueva imagen
            
$FFF imagecolorallocate($img255,255,255);
            
imagefill($image00$FFF);
            
imagecopyresampled ($image$img0000$anchura$altura$dimensiones[0], $dimensiones[1]);//reescala
            
            //INICIA WATERMARK
            //posición horizontal y vertical del watermark:
            
$pos explode("-",$pos);
            
$wmhorz=$pos[0];
            
$wmvert=$pos[1];
        
            if(
$watermark != ''){
                
$logo imagecreatefrompng($watermark);
                
$margen $wmdist//distancia entre el watermark y la orilla
                
$logoW =imagesx($logo); //Anchura del logo
                
$logoH =imagesy($logo); //Altura del logo
                
switch ($wmhorz){
                    case 
"L":
                        
$xpos=$margen;
                        break; 
//end L
                    
case "R":
                        
$xpos=$anchura-$logoW-$margen//posición en x del wm
                        
break; //end R
                
//end switch hotz
                
switch ($wmvert){
                    case 
"T":
                        
$ypos=$margen
                        break; 
//end T
                    
case "B":
                        
$ypos=$altura-$logoH-$margen//posición en y del wm
                        
break; //end B
                
//end switch vert
                
imagecopy($image$logo$xpos$ypos00$logoW$logoH); //Pone el logo
                
imagedestroy($logo); //destruye el logo después de usarlo
            
}
            
//TERMINA WATERMARK
            
imagejpeg($image,"$dir$image_name"$c1);//mueve la imagen al server (el segundo parámetro es la calidad)
            
imagedestroy($image); //destruye image
            
imagedestroy($img); //destruye la imagen "origen"
        //TERMINA IMAGEN
        
        //INICIA THUMBNAIL
        
if($anchura_thumb != || $anchura_thumb == $anchura || $anchura_thumb == "" || $anchura_thumb == NULL) {
            
//crea los directorios necesarios
            
$subdir "small";
            if(
$dir!=""){
                if(!
file_exists($dir.$subdir)) mkdir($dir.$subdir);
            } else {
                if(!
file_exists($subdir)) mkdir($subdir);
            }
            
//asigna las variables        
            
$name=$_FILES[$campo]['name'];
            
$type=$_FILES[$campo]['type'];
            
$thumb_name $subdir."/".$name;
            
            
//Imagen original en el servidor
            
$temp=$_FILES[$campo]['tmp_name']; 
            
            
//Objeto con el que trabajará el programa
            
if($type=="image/pjpeg"){
                
$img = @imagecreatefromjpeg($temp) or die("No se encuentra la imagen $image_name<br>\n"); 
            }
            if(
$_FILES[$campo]['type']=="image/gif"){
                
$img = @imagecreatefromgif($temp) or die("No se encuentra la imagen $image_name<br>\n");
                
$thumb_name str_replace(".gif"".jpg"$thumb_name);
            }
            if(
$_FILES[$campo]['type']=="image/x-png"){
                
$img = @imagecreatefrompng($temp) or die("No se encuentra la imagen $image_name<br>\n");
                
$thumb_name str_replace(".png"".jpg"$thumb_name);
            }
            
//Para que acepte la transparencia del PNG
            
imagealphablending($imgtrue);
            
//INICIA PROCESO
                
$dimensiones getimagesize($temp); //Dimensiones originales de la imagen
                
$ratio_thumb = ($dimensiones[0] / $anchura_thumb);
                
$altura_thumb round($dimensiones[1] / $ratio_thumb);
                
$thumb imagecreatetruecolor($anchura_thumb,$altura_thumb); //crea la nueva imagen
                
$FFF imagecolorallocate($img255,255,255);
                
imagefill($thumb00$FFF);
                
imagecopyresampled ($thumb$img0000$anchura_thumb$altura_thumb$dimensiones[0], $dimensiones[1]);//reescala el thumbnail
                //INICIA WATERMARK THUMB
                
if($watermark_thumb != ''){
                    
$logo_thumb imagecreatefrompng($watermark_thumb);
                    
$margen $wmdist//distancia entre el watermark y la orilla
                    
$logoW_thumb =imagesx($logo_thumb); //Anchura del logo
                    
$logoH_thumb =imagesy($logo_thumb); //Altura del logo
                    
switch ($wmhorz){
                        case 
"L":
                            
$xposThumb=$margen/2;
                            break; 
//end L
                        
case "R":
                            
$xposThumb=$anchura_thumb-$logoW_thumb-($margen/2); //posición en x del wm
                            
break; //end R
                    
//end switch hotz
                    
switch ($wmvert){
                        case 
"T":
                            
$yposThumb=$margen/2;
                            break; 
//end T
                        
case "B":
                            
$yposThumb=$altura_thumb-$logoH_thumb-($margen/2); //posición en y del wm
                            
break; //end B
                    
//end switch vert
                    
imagecopy($thumb$logo_thumb$xposThumb$yposThumb00$logoW_thumb$logoH_thumb); //Pone el logo
                    
imagedestroy($logo_thumb); //destruye el logo después de usarlo
                
}
                
//TERMINA WATERMARK THUMB
                
imagejpeg($thumb,"$dir$thumb_name"$c2);//mueve la imagen al server (el segundo parámetro es la calidad)
                
imagedestroy($thumb); //destruye thumb
                
imagedestroy($img); //destruye la imagen "origen"
                
            
} else {
            
                
$thumb_name $image_name;
            
            } 
// end if != 0
            
        //TERMINA THUMBNAIL
    
}
    
$unique time();
    
    
$resampled[0] = $dir.$image_name;
    
$resampled[1] = $dir.$thumb_name
    
$resampled[2] = "<img src=\"$dir$image_name?i=$unique\">";
    
$resampled[3] = "<img src=\"$dir$thumb_name?i=$unique\">";
    
    return 
$resampled;
    
}
# END imgResample2
################################################################################################## 
__________________
Si el mundo es redondo ¿por que le pusieron planeta?
Entonces si hubiese sido plano le hubisen puesto "redondeta"

Última edición por huayayo; 10/09/2005 a las 10:24