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

Frameworks para php Cuando hay que crear proyectos serios hay que recurrir a un Framework que lo apoye. La palabra seriedad la aplico a proyectos medianos-grandes que nec...
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)...
CodeIgniter – Debug e información de forma s... CodeIgniter proporciona una clase que facilita la programación. Activando esta clase desde nuestro controlador, en el momento de mostrar la vista, lis...
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...

Deja un comentario

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

*