CodeIgniter – Generar imagen con librería GD

Estamos delante de un caso muy común: debemos crear una imagen, formato jpg o png, dinámica y que contenga datos dinámicos. Imaginemos que debemos mostrar en formato JPG el carnet de uno de nuestros socios. Este carnet, debe contener un fondo con el diseño elegido, y varios campos con los datos de nuetro socio (nombre, dni, número licencia…).

Aquí tenemos un ejemplo del código necesario para generar la imagen

CONTROLADOR

/* Llamando a esta función del controlador, ya genera directamente la imagen en el navegador */

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
 
class Socio extends CI_Controller {
 
    function __construct() {
        parent::__construct();
        // Modelos
        $this->load->model('socio_model');
    }
 
    ...
 
    function imprimirLicenciaSocio($idsocio) {
            $textofuente = 'fonts/Oswald-Bold.ttf';  // En la raiz de nuestro codeigniter tenemos la carpeta fonts
            // Los datos del socio
            $socio= $this->socio_model->getLicencia($idsocio);  // Llamamos al model que nos consigue los datos del socio
            // Cogemos la imagen del fondo de la licencia
            $img = $this->loadJpeg("licencia-fondo-socio.jpg");
            $textocolor = imagecolorallocate($img, 0, 0, 0);   // Definimos el color del texto
            // Ponemos texto encima de la imagen
            imagettftext($img, 30, 0, 175, 675, $textcolor, $textfont, $socio["nombre"]);
            imagettftext($img, 30, 0, 1360, 675, $textcolor, $textfont, $socio["nif"]);
            imagettftext($img, 30, 0, 175, 825, $textcolor, $textfont, $socio[0]["fechanacimiento"]);
            // Se crea la imagen directamente
            header('Content-Type: image/jpeg');
            imagejpeg($img);
            imagedestroy($img);
    }
 
    /* La función que carga la imagen de fondo para la licencia */
    private function loadJpeg($imgname){
        /* Attempt to open */
        // En la raiz tenemos la carpeta /media/licencias donde almacenamos los fondos de licencias
        $im = @imagecreatefromjpeg("media/licencias/". $imgname);   
 
        /* Si falla carga de imagen */
        if(!$im)
        {
            /* Creamos imagen en blanco */
            $im  = imagecreatetruecolor(150, 30);
            $bgc = imagecolorallocate($im, 255, 255, 255);
            $tc  = imagecolorallocate($im, 0, 0, 0);
 
            imagefilledrectangle($im, 0, 0, 150, 30, $bgc);
 
            /* Mensaje error */
            imagestring($im, 1, 5, 5, 'Error loading ' . $imgname, $tc);
        }
        return $im;
    }
 
    ...
 
}
?>

MODEL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
class Socio_model extends CI_Model {
 
    function __construct() {
            parent::__construct();
    }
 
    function getLicencia($idsocio){
            $sql= "SELECT * FROM licencia_socio WHERE id=$idsocio LIMIT 1";
            $query= $this->db->query($sql);
 
            if ( $query->num_rows() > 0 ){
                return $query->result_array();
            } else {
                return false;
            }
    }
}
?>

VISTA

Desde la vista sólo debemos poner un enlace hacia la función del controlador

1
<a href="<?php echo base_url(); ?>socio/imprimirLicenciaSocio/<?php echo $idsocio; ?>" target="_blank">Imprimir licencia socio</a>

De esta manera se abrirá en otra ventana y se generará la imagen. La podremos descargar a nuestro PC o verla en cualquier dispositivo móvil sin problemas de compatibilidad.

Más información

Artículos relacionados

CodeIgniter – Cómo averiguar si nos visitan ... Ahora mas que nunca, nos puede interesar saber si un usuario visita nuestra web desde el ordenador o, desde un dispositivo móvil (smartphone o tablet)...
Integrar Boilerplate en CodeIgniter Sencillo videotutorial donde explica cómo integrar Boilerplate a un nuevo proyecto PHP creado sobre CodeIgniter. Utiliza como editor Eclipse y crea un...
CodeIgniter – Tiempo expiración de las sesio... Este es uno de esos artículo breves y que no tienes en cuenta, hasta que surge el problema. Haces la aplicación con Codeigniter, trabajas con sesiones...
CodeIgniter From Scratch Sólo recomendaros este enlace donde encontraréis varios artículos, paso a paso de CodeIgniter. http://code.tutsplus.com/series/codeigniter-fr...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*