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. Veamos el artículo CodeIgniter – Generar imagen con librería GD

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. debéis interpretarlo como una manera de hacerlo. Hay varias que cuando encuentre el momento iré implementándolas y compartiéndola. Pero veamos este ejemplo:

CONTROLADOR

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

<?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

<?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

<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. El enlace se abre en otra venta, llamando al controlador que con el header(‘Content-Type: image/jpeg’); del código hace que se envíe información en forma de imagen. Dicho de otro modo, creamos la imágen y le decimos al navegador que le enviamos datos en forma de imágen.

Espero que os sea de utilidad el artículo CodeIgniter – Generar imagen con librería GD.


Más información