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
Hola, buen tema el de este post, podrias enviarme el codigo con los archivos de ejemplo, ya que coloco este codigo y no me funciona.
Te agradeceria mucho.
Saludos.
Hola Edwin,
el código es orientativo para ver cómo hacerlo. No está todo el código. Lo primero es confirmar que tiene GD activado en tu servidor PHP. Luego sería guiándote de este código, tú hacer el tuyo. Ten en cuenta que el artículo está creado en el 2017.
Te recomendaría que le echaras un vistazo a la librería que tiene CodeIgniter 3 para trabajar con imágenes:
https://codeigniter.com/userguide3/libraries/image_lib.html