Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/07/2010, 07:05
severicks
 
Fecha de Ingreso: septiembre-2009
Mensajes: 306
Antigüedad: 17 años, 1 mes
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(244, 204);
                
imagecopyresized($thumb, $img, 0, 0, abs(($ancho - 244) / 2), abs(($alto - 204) / 2), 244, 204, 244, 204);
                
                return array(
244, 204);
            }

    
            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(244, 204);
                
imagecopyresized($thumb, $img, 0, 0, abs(($ancho - 244) / 2), abs(($alto - 204) / 2), 244, 204, 244, 204);
                
                return array(
244, 204);
            } 
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