Subidor de Imagenes (Tercera parte): Subir y miniaturizar
Bueno seguimos con lo del ultimo día. Ahora lo que nos queda hacer es el controlador que se ocupe de subir nuestro fichero en el servidor y luego cree una imagen en miniatura de esta (thumbnail).
Como ya dije en el articulo anterior, usaremos estas dos librerías: File Uploading Class y Image Manipulation Class.
Al ser un solo formulario lo haremos todo en una misma función del controlador. Para empezar necesitaremos subir el archivo al servidor y a su vez almacenar la información en la base de datos:
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '5000';
$config['encrypt_name'] = TRUE;
$this->load->library('upload', $config);
if(!$this->upload->do_upload("imagen"))
{
echo $this->upload->display_errors();
}
else
{
$data = $this->upload->data();
$this->db->query("INSERT INTO `imagenes` (`imagen`, `fecha`, `ip`) VALUES (?, ?, ?)", array($data['file_name'], time(), $_SERVER['REMOTE_ADDR']));
Como veis es muy fácil de usar, hay que especificar las distintas opciones que queremos en el array config (hay mas opciones disponibles en la guía de usuario de CI). Le pasamos el "name" input del formulario para subir la imagen en la función "do_upload". Y luego simplemente añadir un registro en la base de datos con la información que nos da "$this->upload->data()";
Ahora necesitaremos que a partir de esta imagen se cree un thumbnail, lo haremos así:
$config['image_library'] = 'gd2';
$config['source_image'] = $config['upload_path'].$data['file_name'];
$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 200;
$config['height'] = 200;
$this->load->library('image_lib', $config);
$this->image_lib->resize();
El funcionamiento es casi idéntico al de subir archivos: especificamos las opciones que queramos en el array de config y usamos la función "resize()" en este caso para crear el thubmnail.
Y bueno eso es todo por ahora. Como siempre, pongo a vuestra disposición una demo totalmente funcional para que podáis comprobar que todo funciona perfectamente. Desde la misma demo tenéis un link para bajaros el código del taller.
¿Te gustó este artículo?
Aún no hay trackbacks.

27 septiembre, 2008 - 09:02
Buenos estos tutoriales jeje.. aunque ya le he agarrado mucho mas el truco al CI solo quisiera decirte q es una pena que no utilices los modelos para nada..
Creo que deberias darle un uso a los modelos para separar aquellas operaciones de la base de datos de los controladores en si.
Tambien me parece que te hace falta el uso del Active Record en estos ejemplos el cual es muy util para facilitar el uso del mismo CI.
Asi pasamos de algo como:
$this->db->query(“INSERT INTO `imagenes` (`imagen`, `fecha`, `ip`) VALUES (?, ?, ?)”, array($data['file_name'], time(), $_SERVER['REMOTE_ADDR']));
A:
$array = array(
‘imagen’ => $data['file_name'],
‘fecha’ => time(),
‘ip’ => $_SERVER['REMOTE_ADDR']
);
$this->db->insert(‘imagenes’, $array);
Saludos y nuevamente gracias por haberme interesado cada dia mas en el CI.
27 septiembre, 2008 - 13:23
Bueno, es otra manera correcta de hacerlo.
3 octubre, 2008 - 14:23
El enlace para descargar el taller no funciona.
P.D: Enhorabuena por los tutoriales tan buenos que realizas
3 octubre, 2008 - 14:49
Muchas gracias por darme el aviso txoko, ahora mismo corrijo la ruta del link que me olvide de poner una cosa ;)
17 octubre, 2008 - 12:15
Hola de nuevo.
He estado siguiendo tus tutoriales con bastante interes, pero siempre he trabajado desde un servidor local. Hoy he subido la aplicacion a un servidor y funciona. El problema esta que cuando le da la gana me salta el error siguiente:
An Error Was Encountered
Unable to connect to your database server using the provided settings.
¿A qué puede ser debido? Te lo pregunto porque parece que has tocado esto del codeigniter bastante e igual te habia ocurrido antes.
Gracias por todo
17 octubre, 2008 - 12:26
Pues eso es que tienes algun dato mal puesto en el config/database.php, ya sea las credenciales (usuario/password) o el nombre de la base de datos/servidor
17 octubre, 2008 - 12:30
mirare el config/database.php, pero lo raro es que funcione y de repente no vaya
gracias por contestar tan rapido
27 octubre, 2008 - 04:12
Muchas gracias por todos estos tutoriales, no veo la hora de ponerlos en practica, es muy generoso de tu parte.
Felicitaciones !!!
14 marzo, 2010 - 11:08
capo sirve gracias, es muy bueno el blog, ayuda a quien arranca en codeigniter, en un dia ya complete de un tenia algunas limitaciones y aqui me pude orientar con el manejo, gracias
5 marzo, 2011 - 01:15
me parse exelente ke no uses nodelos para cosas simples. pero seria mejor cambiar esas instrucciones sql por store procidium, asi arias mas facil de leer tu codigo =3
30 noviembre, 2011 - 13:26
no logro hacer que me ande miniaturizar la imagen… probe tu ejemplo y crea dos link uno con la imagen y otro con la miniatura pero la miniatura no me anda me dice objeto no encontrado no la esta creando bien…. si se te ocurre cual puede ser el problema avisame… te muestro lo que yo hice
$obj = $this->Articulo_Model->imagen($id);//cargo la imagen desde el model
if ($imagen != null) {
$url = base_url() . $obj->imagen;
} else {
$url = base_url() . ‘img/imagen_estandar.png’;
}
$config['image_library'] = ‘gd’;
$config['source_image'] = $url;
$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 200;
$config['height'] = 200;
$a = $this->load->library(‘image_lib’, $config);
$img = $this->image_lib->resize();
hice un print_r de la url a ver q esta cargando y para mi esta bien…
http://localhost/miweb/img/290c6306215c0c88926ff2eb1c921675.jpg
no se que estoy haciando mal…
30 noviembre, 2011 - 13:29
haci es el codigo lo copia mal…(igual no anda)
$obj = $this->Model->imagen($id);//cargo la imagen desde el model
if ($obj != null) {
$url = base_url() . $obj->imagen;
} else {
$url = base_url() . ‘img/imagen_estandar.png’;
}
$config['image_library'] = ‘gd’;
$config['source_image'] = $url;
$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 200;
$config['height'] = 200;
$a = $this->load->library(‘image_lib’, $config);
$img = $this->image_lib->resize();