Foros del Web » Programando para Internet » PHP »

Hacerle crop a una imagen

Estas en el tema de Hacerle crop a una imagen en el foro de PHP en Foros del Web. hola. tengo una pagina en que los usuarios pueden subir imagenes pero como pueden subir imagenes de cualquier dimension genera problemas si la proporcion entre ...
  #1 (permalink)  
Antiguo 26/07/2010, 07:05
 
Fecha de Ingreso: septiembre-2009
Mensajes: 306
Antigüedad: 14 años, 7 meses
Puntos: 10
Hacerle crop a una imagen

hola.

tengo una pagina en que los usuarios pueden subir imagenes pero como pueden subir imagenes de cualquier dimension genera problemas si la proporcion entre alto y ancho no es la adecuada. para eso me he creado este pequeño script basandome an un par de tutoriales encontre:

Código PHP:
    function crear_thumb($img$tname){
            
// Obtencion de formatos de imagen 
            
if(stristr(strtolower($img),"jpg") or stristr(strtolower($img),"jpeg")){ 
                
$img imagecreatefromjpeg($img); 
                
$tipo "jpg"
            } 
    
            if(
stristr(strtolower($img),"png")){ 
                
$img imagecreatefrompng($img); 
                
$tipo "png"
            } 
             
            if(
stristr(strtolower($img),"gif")){ 
                
$img imagecreatefromgif($img); 
                
$tipo "gif"
            } 
                 
                    
// Obtenemos ancho y alto de la imagen 
            
$ancho imagesx($img); 
            
$alto imagesy($img); 
            if((
$ancho/$alto <= 1.20) && ($alto/$ancho <=0.84)){
                
$n_alto 202
                
$redu = ($n_alto 100) / $alto
                
$n_ancho round($ancho $redu 100); 
                
$thumb imagecreatetruecolor($n_ancho,$n_alto); 
                
imagecopyresized($thumb,$img,0,0,0,0,$n_ancho,$n_alto,$ancho,$alto); 

            }else{
                
$thumb imagecreatetruecolor(244204);
                
imagecopyresized($thumb$img00abs(($ancho 244) / 2), abs(($alto 204) / 2), 244204244204);
                
                return array(
244204);
            }

    
            switch(
$tipo){
                
                case 
"jpg":
                
imagejpeg($thumb$tname); 
    
                case 
"png":
                
imagepng($thumb$tname); 
    
                case 
"gif":
                
imagegif($thumb$tname); 
                
            }
    
            
imagedestroy($thumb); 
            return array(
$n_ancho$n_alto);
    } 
el problema lo tengo en esta parte:

Código PHP:
if(($ancho/$alto <= 1.20) && ($alto/$ancho <=0.84)){
                
$n_alto 202
                
$redu = ($n_alto 100) / $alto
                
$n_ancho round($ancho $redu 100); 
                
$thumb imagecreatetruecolor($n_ancho,$n_alto); 
                
imagecopyresized($thumb,$img,0,0,0,0,$n_ancho,$n_alto,$ancho,$alto); 

            }else{
                
$thumb imagecreatetruecolor(244204);
                
imagecopyresized($thumb$img00abs(($ancho 244) / 2), abs(($alto 204) / 2), 244204244204);
                
                return array(
244204);
            } 
si entra dentro de ese "else" la imagen no se crea, mi intencion es recortar el centro de la imagen original en una neva imagen de 244x204. que estoy haciendo mal??
__________________
Mantente al tanto del acontecer Turistico nacional
Visita el Parque Bicentenario El Salvador
  #2 (permalink)  
Antiguo 26/07/2010, 08:25
Avatar de JordyRCC  
Fecha de Ingreso: julio-2010
Ubicación: En una cabaña, rodeado de contraseñas encriptadas en md5
Mensajes: 19
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Hacerle crop a una imagen

El return termina el script. La solución es la siguiente:
Código PHP:
Ver original
  1. if(($ancho/$alto <= 1.20) && ($alto/$ancho <=0.84)){
  2.                 $n_alto = 202;
  3.                 $redu = ($n_alto * 100) / $alto;
  4.                 $n_ancho = round($ancho * $redu / 100);
  5.                 $thumb = imagecreatetruecolor($n_ancho,$n_alto);
  6.                 imagecopyresized($thumb,$img,0,0,0,0,$n_ancho,$n_alto,$ancho,$alto);
  7.  
  8.             }else{
  9.                 $thumb = imagecreatetruecolor(244, 204);
  10.                 imagecopyresized($thumb, $img, 0, 0, abs(($ancho - 244) / 2), abs(($alto - 204) / 2), 244, 204, 244, 204);
  11.                
  12.                 $n_ancho=244; //Guardamos el valor nuevo de la altura para más adelante
  13.                 $n_alto=204; //Guardamos también el alto
  14.             }

Con lo cual, tu script entero sería:
Código PHP:
Ver original
  1. function crear_thumb($img, $tname){
  2.             // Obtencion de formatos de imagen
  3.             if(stristr(strtolower($img),"jpg") or stristr(strtolower($img),"jpeg")){
  4.                 $img = imagecreatefromjpeg($img);
  5.                 $tipo = "jpg";
  6.             }
  7.    
  8.             if(stristr(strtolower($img),"png")){
  9.                 $img = imagecreatefrompng($img);
  10.                 $tipo = "png";
  11.             }
  12.              
  13.             if(stristr(strtolower($img),"gif")){
  14.                 $img = imagecreatefromgif($img);
  15.                 $tipo = "gif";
  16.             }
  17.                  
  18.                     // Obtenemos ancho y alto de la imagen
  19.             $ancho = imagesx($img);
  20.             $alto = imagesy($img);
  21.             if(($ancho/$alto <= 1.20) && ($alto/$ancho <=0.84)){
  22.                 $n_alto = 202;
  23.                 $redu = ($n_alto * 100) / $alto;
  24.                 $n_ancho = round($ancho * $redu / 100);
  25.                 $thumb = imagecreatetruecolor($n_ancho,$n_alto);
  26.                 imagecopyresized($thumb,$img,0,0,0,0,$n_ancho,$n_alto,$ancho,$alto);
  27.  
  28.             }else{
  29.                 $thumb = imagecreatetruecolor(244, 204);
  30.                 imagecopyresized($thumb, $img, 0, 0, abs(($ancho - 244) / 2), abs(($alto - 204) / 2), 244, 204, 244, 204);
  31.                
  32.                 $n_ancho=244; //Guardamos el valor nuevo de la altura para más adelante
  33.                 $n_alto=204; //Guardamos también el alto
  34.             }
  35.  
  36.    
  37.             switch($tipo){
  38.                
  39.                 case "jpg":
  40.                 imagejpeg($thumb, $tname);
  41.    
  42.                 case "png":
  43.                 imagepng($thumb, $tname);
  44.    
  45.                 case "gif":
  46.                 imagegif($thumb, $tname);
  47.                
  48.             }
  49.    
  50.             imagedestroy($thumb);
  51.             return array($n_ancho, $n_alto);
  52.     }

Nos leemos y suerte programando.

Etiquetas: Ninguno
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 07:53.