miércoles, 18 de septiembre de 2013

Redimensionar imágenes en CodeIgniter

Hoy vamos a ver cómo podemos redimesionar imágenes con CodeIgniter con la librería
image_lib. Usando las opciones que nos da CodeIgniter podemos redimensionar, recortar,
 rotar y poner marca de agua; para este ejemplo vamos a ver cómo redimensionar las imágenes.

paso 1
para el ejemplo vamos a llamar a la aplicación ci_images.
lo primero que hacemos es crear 2 directorios, uno para guardar las imágenes originales y el
otro para las imágenes que se van a redimensionado.

En la raíz de nuestro proyecto creamos un directorio llamado uploads y a su vez dentro de este
creamos otro llamado thumbs.

Donde quedan guardadas las imágenes originales: ci_images/uploads/
Donde se guardan las nuevas imágenes: ci_images/uploads/thumbs/

Paso 2
vamos a ci_images/application/controllers/ y dentro de esta carpeta creamos un controlador al
que lo nombramos como: images.php

Código del controlador images.php


<?php

class Images extends CI_Controller {

    function __construct()
    {
        parent::__construct();
       $this->load->helper(array('form', 'url'));
    }

    function index()
    {
        $this->load->view('upload_image', array('error' => ' ' ));
       
    }
        //  ************************ SE SUBEN LA IMÁGENES    ************************
function do_upload()
    {
        $config['upload_path'] = './uploads/'; // definimos la carpeta donde se guardaran
        $config['allowed_types'] = 'gif|jpg|png'; // el tipo de imágenes permitidas
          // $config['file_name']='nuevo_nombre';  // para renombrar la imagen
        $config['overwrite']=TRUE;        // sobreescribir las imágenes
        $config['remove_spaces']=TRUE;
        $config['max_size']    = '2048'; // el peso máximo que de la imagen a redimencionar
        $config['max_width']  = '2000'; // el ancho máximo
        $config['max_height']  = '1500'; // la máxima altura

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

  if (!$this->upload->do_upload())
    {
        $error = array('error' => $this->upload->display_errors());
        $this->load->view('upload_image', $error);
           
    }
    else
        {
         $data = array('upload_data' => $this->upload->data());
      
           foreach ($this->upload->data() as $item => $value){
              
                     if($item=="file_path"){
                      
                            $path=$value;

                        }if($item=="file_name"){
                      
                             $name=$value;
                            }
           
            }// end foreach
           
          $this->resize($path,$name);
        }
           
    }
   
//*********************** SE REDIMENSIONAN *****************************
   
function resize($path,$name)
    {  
         $config['image_library'] = 'gd2';
         $config['source_image'] =  $path.$name; // le decimos donde esta la imagen que acabamos de subir
         $config['new_image']=$path.'thumbs'; // las nuevas imágenes se guardan en la carpeta "thumbs"
         $config['create_thumb'] = TRUE;
         $config['maintain_ratio'] = TRUE;
         $config['width'] = 550;
         $config['height'] = 450;
       
        $this->load->library('image_lib', $config);
       
        if (!$this->image_lib->resize())
         {
                     echo $this->image_lib->display_errors();
           }
       
        $this->image_lib->resize();
   
        $this->load->view('upload_success');
    }
}
?>


Paso 3
Creamos la vista desde la cual podremos cargar las imágenes a redimnensionar; la llamamos
upload_image.php, la ruta donde la guardamos: ci_images/application/views/

Código de la vista upload_image.php

<html>
<head>
<title>Upload Form</title>
</head>
<body>
<hr/><hr/>   
<h5>Suba una Imagen de 2 Mb o menos para redimensionar...</h5>
<?php echo $error;?>
<?php echo form_open_multipart('images/do_upload');?>

<input type="file" name="userfile" size="20" /><br>
<input type="submit" value="Subir Imagen" />
</form>
</body>
</html>

   

Último paso

En ci_images/application/views/ creamos otra vista llamada upload_success.php, la cual nos
va informar que el proceso ha sido hecho con éxito si no hubo errores.

codigo de upload_success.php

<html>
<head>
<title>Succes</title>
</head>
<center><body>
<h4>La imágen se redimensionó con éxito!</h4>
<h5><?php echo anchor('images', 'Redimensionar otra imagen!'); ?></h5>
</body></center>
</html>

Probamos en el navegador: http://localhost/ci_images/index.php/images

Descargar ejemplo