Ver Mensaje Individual
  #13 (permalink)  
Antiguo 12/09/2005, 20:27
huayayo
 
Fecha de Ingreso: abril-2004
Mensajes: 56
Antigüedad: 20 años
Puntos: 0
Escoffie :
El código va mucho mejor. funciona correctamente cuando la imagen original es menor de 250 x 250 o cuando es de tamaño superior a 250 x 250 pero cuadrada.

El problema es cuando la imagen es mayor a 250 x 250 pero de lados distintos (por ejemplo 1024 x 768), lo que hace en este caso es tomar una parte de la foto, osea lo que alcance en 250 x 250 partiendo de la posición 0,0.

Cuando la foto es de 1024x 768 debe hacer lo siguiente:
-Redimensionarla proporcionalmente a 250 x 188
-Incrustarla en otra imagen de 250 x 250 para mantener la uniformidad de las imagenes (mirar el ejemplo en deremate http://www.deremate.cl/accdb/ViewIte...880397&page=19)

el codigo que estoy utilizando es este. (Se puede copiar y pegar en un php para probar), le saqué la parte del thumbail porque no la necesito utilizar por ahora.

Código PHP:
<?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="img/"$anchura=250$anchura_thumb=80$watermark="sello.png"$watermark_thumb=""$pos="L-B"$wmdist=1$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); 
        
$dimensiones getimagesize($temp); //Dimensiones originales de la imagen 
        
        /*
        //INICIA PROCESO 
            if ($dimensiones[0] == $dimensiones[1]) {
                //Este funciona bien para imagenes de mismo alto mismo ancho
                
                $ratio = ($dimensiones[0] / $anchura); 
                $altura = round($dimensiones[1] / $ratio); 
                echo $dimensiones[0]."<br>";
                echo $dimensiones[1];
    
                $image = imagecreatetruecolor($anchura,$altura); //crea la nueva imagen 
                $FFF = imagecolorallocate($img, 255,255,255); 
                imagefill($image, 0, 0, $FFF); 
                imagecopyresampled ($image, $img, 0, 0, 0, 0, $anchura, $altura, $dimensiones[0], $dimensiones[1]);//reescala 
             }
        */
        //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

        
$dimensiones getimagesize($temp); //Dimensiones originales de la imagen 
        
$anchura=250//medida en píxeles, aquí pones lo que quieras 
        
$altura 250//medida en píxeles, aquí pones lo que quieras 
        
$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]);
        
// Cambia las proporciones al tamaño especificado 

        //INICIA PROCESO 
        
$dimensiones getimagesize($temp); //Dimensiones originales de la imagen 
        
$anchura=250//medida en píxeles, aquí pones lo que quieras 
        
$altura 250//medida en píxeles, aquí pones lo que quieras 
        
$image imagecreatetruecolor($anchura,$altura); //crea la nueva imagen 
        
$FFF imagecolorallocate($img255,255,255); 
        
imagefill($image00$FFF); 
        
imagecopyresampled ($image$img0000$dimensiones[0], $dimensiones[1], $dimensiones[0], $dimensiones[1]);
        
// Rellena el rectángulo del tamaño especificado con la imagen, sólo será visible lo que quepa de la imagen, 
        // el relleno empieza desde 0x, 0y (esquina superior izquierda) 










  
            //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 
 
}
    
$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 Cluster; 13/09/2005 a las 06:16