Comunidad de diseño web y desarrollo en internet online

Librerias Gd2 - resizeo de imagen

Citar            
MensajeEscrito el 13 Feb 2009 05:07 am
buenas buenas!! Bueno, como bien dice el tìtulo, estoy tratando de descular el resizeo una imagen q subo y guardo mediante las galerias antes mencionadas.
El problema está cuando quiero escalar propocionalemnte dicha imagen, para hacer la captura pero resulta que la función, por algun razón, no me está funcionando. Lo que quiero es tomar como parámetro que la imagen en uno de los casos no sea menos ancho q 64 y menos alto que 64, por lo tando, si el ancho es mas que el alto, entonces escalaría el alto hasta dar con 64, total el ancho nunca sería menos ya que tiene mas px q el alto. Y visceverza.
Miren la funcion donde están los: "*****************************"
Aqui les dejo el código para aquellos que se atrevan a leerlo y darme vuestra opinión en donde está la falla.
Gracias!


Código :

<?php
      {
         {
         // Cargamos modelo principal
         $this->load->model( 'upload_m' );
         
         //Helpers
         $this->load->helper( 'form' );
         
         // Propiedades del controlador
         $this->error       = '';
         $this->success      = '';
         $this->sizes_mid    = array( 206, 206 );
         $this->sizes_small    = array( 64, 64 );
      }
      
      public function index()
      {
         if ( $this->input->post( 'submit' ) )
         {
            $this->load->library( 'form_validation' );
            
            // Primero chequeamos la descripcion
            $this->form_validation->set_rules( 'descripcion', '"Descripcion de la Imagen"', 'trim|required|max_length[255]' );
            
            if ( $this->form_validation->run() === true )
            {
               // Procedemos al upload de la imagen
               $this->load->library( 'upload' );
               
               $config                   = array();
               $config[ 'upload_path' ]       = './images/usuarios/';
               $config[ 'allowed_types' ]       = 'gif|jpg|png';
               $config[ 'max_size' ]         = '2048';
               $config[ 'encrypt_name' ]      = true;
               
               $this->upload->initialize( $config );
               
               $this->upload->do_upload( 'imagen' );
               
               if ( $this->upload->display_errors() )
               {
                  $this->error = $this->upload->display_errors();
               }
               else
               {
***************************// Generamos los thumbs
                  $data                     = $this->upload->data();
                  
                  if ( $data[ 'width' ] > $data[ 'height' ] )
                  {
                     $config[ 'master_dim' ] = 'height';
                  }
                  else
                  {
                     $config[ 'master_dim' ] = 'width';
                  }
                  
                  $config[ 'image_library' ]    = 'gd2';
                  $config[ 'source_image' ]    = $data[ 'full_path' ];
                  $config[ 'create_thumb' ]    = true;
                  $config[ 'maintain_ratio' ] = true;
                  $config[ 'thumb_marker' ]   = '_thumb_mid';
                  $config[ 'width' ]          = $this->sizes_mid[ 0 ];
                  $config[ 'height' ]       = $this->sizes_mid[ 1 ];

                  $this->load->library( 'image_lib', $config );

                  $this->image_lib->resize();
                  $this->image_lib->clear();
                  
                  $config[ 'thumb_marker' ]   = '_thumb_small';
                  $config[ 'width' ]          = $this->sizes_small[ 0 ];
                  $config[ 'height' ]       = $this->sizes_small[ 1 ];
                  
                  $this->image_lib->initialize( $config );
                  $this->image_lib->resize();
                  
                  $this->upload_m->add( $this->upload->data() );
                  
                  $this->success = '<p>La imagen ha sido subida correctamente</p>';
               }
            }
            
         }
         
      }
      
   }

Por juanofranco

25 de clabLevel



Genero:Masculino  

msie7
Citar            
MensajeEscrito el 13 Feb 2009 05:16 am
Se me hace un poco compilicado, y más teniendo en cuenta que las últimas versiones de PHP ya tienen incorporado el gd, te dejo este pedazo de código que yo uso para escalra siempre al mismo ancho:

Código :

//recibo la imagen desde una forma
$im1 = imagecreatefromjpeg($_FILES['pic']['tmp_name']);
//ok creamos una thumbnail grande
   $width = imagesx($im1);
   $height = imagesy($im1);
   $aspect_ratio = $height/$width;
   if ($height < $width){ $size1 = 60; } else { $size1 = 45; };
   if ($width <= $size1) {
     $new_w1 = $width;
     $new_h1 = $height;
   } else {
    $new_w1 = $size1;
    $new_h1 = abs($new_w1 * $aspect_ratio);
   }

$img2 = imagecreatetruecolor ($new_w1,$new_h1);
imagecopyresampled ($img2,$im1,0,0,0,0,$new_w1,$new_h1,$width,$height);
imagejpeg($img2, "minuevaimagen.jpg", 75);
imagedestroy($img2);
imagedestroy($img1);


Bastante sencillo no? sin inicializar nada ni meterse en aprietos, saludos!

Por gente21

79 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Feb 2009 05:50 am
Gracias gente21 x responderme tan pronto! El problema es el siguiente. Si yo subo una imagen que es de 800x300 por ejemplo, y pretendo escalarla a un tamaño que no sea menor a 64x64. AL escalar proporcionalmente los 800, el width me queda en 64 (bien), pero el height me queda en 24... ahi es donde tengo el problema con la funcion q estoy tratando de descular... la idea es que calcule teniendo en cuenta que si width>height entonces tome como patron principal para escalar el height, y visceverza. Pero por alguna razón no me está funcionando.
Saludos!!

Por juanofranco

25 de clabLevel



Genero:Masculino  

msie7
Citar            
MensajeEscrito el 13 Feb 2009 02:32 pm
Ok haber, que es lo que intentas?:

a) ¿Quieres que la imagen tenga un tamaño máximo de 64px (dependiendo de si es de ancho o alto)? en ese caso el otro número tendría que ser menor para mantener la relación de aspecto.

b) ¿Quieres que el numero menor sea 64? entonces el otro número daría mayor.

c) ¿Quieres una imagen cuadrada que mantenga la relación de aspecto? quiero decir: que de 64x64 px y centre el resultado.

d) No te interesa mantener la relación de aspecto y quieres solo una imagen cuadrada.

Por gente21

79 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Feb 2009 03:17 pm
Gracias gente_21!! Acabo de resolverlo.
la funcion que usaba hacia if ( $data[ 'width' ] > $data[ 'height' ] ) y resulta que estaba tomando mal las propiedades, ya que son if ( $data[ 'image_width' ] > $data[ 'image_height' ] ). Tema resuelto.
Lo que queria era esclar la foto para un thumb en flash, el thumb en flash tiene 64x64 por lo tando la imagene si era desproporcionada en alto y largo, tenía que escalar contemplando la posibilidad de que el lado mas chico, pore ejmplo el height llegara a 64, proporcionalmente al width. Y visceverza. Espero haber sido claro.
Gracias de todos modos!

Por juanofranco

25 de clabLevel



Genero:Masculino  

msie7
Citar            
MensajeEscrito el 13 Feb 2009 04:08 pm
denada =)

Por gente21

79 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.