Códigos de barras con PHP
Los códigos de barras sirven para muchísimas cosas, por ejemplo, identificar a productos. Podríamos tener un sistema de ventas y generar códigos de barras dependiendo del valor de cada uno de ellos.
Es por ello que en este artículo voy a explicar cómo generar códigos de barras con PHP y guardarlos en una imagen PNG o JPG, así como guardarlos en un archivo SVG o simplemente generar el código HTML necesario.
Por cierto, para esto vamos a usar la librería llamada PHP Barcode Generator cuyo repositorio encuentras aquí.
Este ejemplo es muy parecido al de combinar documentos PDF, porque también veremos cómo guardar la imagen en el disco duro, generarla en tiempo de ejecución o forzar la descarga.
Nota: mira cómo generar códigos de barras con AngularJS.
Código fuente y ejemplos
Si quieres navegar por el código fuente, visita el repositorio de GitHub.
Instalar librería
Para instalar la librería necesitas instalar Composer. Si crees que composer no sirve, se te hace complicado o necesitas adaptar tu proyecto, por favor mira lo siguiente:
Te aseguro que Composer te hará un mejor desarrollador de PHP. Ahora sí a lo que estábamos, instala la librería con:
composer require picqer/php-barcode-generator
Luego de eso espera a que se termine de instalar, incluye tu autoload en donde lo necesites (ve los tutoriales de composer si no sabes cómo) y ya podemos continuar.
Primer vistazo al generador de códigos de barras de PHP
Aquí está el ejemplo más básico, simple y con lo mínimo de código. En él generamos un código de barras que dice “parzibyte.me” y lo mostramos como HTML. Veámoslo brillar:
<?php
/**
* Ejemplo 1 para generar códigos de barras
* con PHP
*
* Generar un código de barras que dice "parzibyte.me"
*
* @author parzibyte
*/
# Incluimos el autoload
require_once "vendor/autoload.php";
# Indicamos que usaremos el namespace de BarcodeGeneratorHTML
use Picqer\Barcode\BarcodeGeneratorHTML;
# Crear generador
$generador = new BarcodeGeneratorHTML();
# Ajustes
$texto = "parzibyte.me";
$tipo = $generador::TYPE_CODE_128;
# ¿Quieres todos los tipos? mira el código:
// https://github.com/picqer/php-barcode-generator/blob/master/src/BarcodeGenerator.php#L41
$htmlGenerado = $generador->getBarcode($texto, $tipo);
# Hora de imprimir
echo $htmlGenerado;
Eso va a generar una serie de elementos div y los pondrá como HTML. No te preocupes, si quieres que se generen como imagen vamos a verlo más abajo.
Por ahora veamos que el código fue generado de manera perfecta, aquí la prueba (lo he escaneado con esta app) escaneada con mi teléfono:
De esta manera vemos que la calidad del código de barras es excelente, pues no es necesario ni imprimir ni leer con un lector para saber el contenido.
Los tipos de códigos de barras
Puedes usar cualquier tipo soportado por la librería. A la fecha son los siguientes:
- TYPE_CODE_39
- TYPE_CODE_39_CHECKSUM
- TYPE_CODE_39E
- TYPE_CODE_39E_CHECKSUM
- TYPE_CODE_93
- TYPE_STANDARD_2_5
- TYPE_STANDARD_2_5_CHECKSUM
- TYPE_INTERLEAVED_2_5
- TYPE_INTERLEAVED_2_5_CHECKSUM
- TYPE_CODE_128
- TYPE_CODE_128_A
- TYPE_CODE_128_B
- TYPE_CODE_128_C
- TYPE_EAN_2
- TYPE_EAN_5
- TYPE_EAN_8
- TYPE_EAN_13
- TYPE_UPC_A
- TYPE_UPC_E
- TYPE_MSI
- TYPE_MSI_CHECKSUM
- TYPE_POSTNET
- TYPE_PLANET
- TYPE_RMS4CC
- TYPE_KIX
- TYPE_IMB
- TYPE_CODABAR
- TYPE_CODE_11
- TYPE_PHARMA_CODE
- TYPE_PHARMA_CODE_TWO_TRACKS
También puedes leer más sobre los tipos. Lo que importa aquí es que para usar el tipo declara la variable así:
$tipo = $generador::EL_TIPO_AQUI;
Es decir, accede a los miembros estáticos del generador. No hablaremos de tipos aquí porque no es el punto del post, pero si quieres mi recomendación, usa el TYPE_CODE_128
.
Generadores de códigos de barras
Ya vimos allá arriba el HTML, pero esta librería también permite generar códigos de barras como:
- Imagen PNG
- Imagen JPG
- SVG
Para usarlo, simplemente cambiamos las clases. Por ejemplo:
<?php
/**
* Ejemplo 2 para generar códigos de barras
* con PHP
*
* Ejemplificar generadores
*
* @author parzibyte
*/
# Incluimos el autoload
require_once "vendor/autoload.php";
# 4 generadores
use Picqer\Barcode\BarcodeGeneratorHTML;
use Picqer\Barcode\BarcodeGeneratorPNG;
use Picqer\Barcode\BarcodeGeneratorJPG;
use Picqer\Barcode\BarcodeGeneratorSVG;
# Crear generadores
$generadorDeHTML = new BarcodeGeneratorHTML();
$generadorDePNG = new BarcodeGeneratorPNG();
$generadorDeJPG = new BarcodeGeneratorJPG();
$generadorDeSVG = new BarcodeGeneratorSVG();
# Ajustes
$texto = "parzibyte.me";
$tipo = $generadorDeHTML::TYPE_CODE_128;
$comoHTML = $generadorDeHTML->getBarcode($texto, $tipo);
$comoPNG = $generadorDePNG->getBarcode($texto, $tipo);
$comoJPG = $generadorDeJPG->getBarcode($texto, $tipo);
$comoSVG = $generadorDeSVG->getBarcode($texto, $tipo);
# Nota: no imprimimos nada
Y cada generador devuelve los datos del código de barras, ya sea para ser guardados o para imprimirlos directamente. Veamos más ejemplos.
Código de barras como PNG en el navegador
Veamos cómo mostrar una imagen de un código de barras en el navegador. El formato es PNG pero sería lo mismo (cambiando la clase) para JPG, HTML y SVG. Aquí un ejemplo:
<?php
/**
* Ejemplo 3 para generar códigos de barras
* con PHP
*
* Generar imagen PNG y mostrarla en navegador
*
* @author parzibyte
*/
# Incluimos el autoload
require_once "vendor/autoload.php";
# Indicamos que usaremos el namespace de BarcodeGeneratorPNG
use Picqer\Barcode\BarcodeGeneratorPNG;
# Crear generador
$generador = new BarcodeGeneratorPNG();
# Ajustes
$texto = "parzibyte.me";
$tipo = $generador::TYPE_CODE_128;
$imagen = $generador->getBarcode($texto, $tipo);
# Encabezado para que el navegador sepa que es una imagen
header("Content-type: image/png");
# Hora de imprimir
echo $imagen;
En ese caso se mostrará una imagen PNG que puede ser descargada o visualizada.
Guardar imagen PNG con código de barras usando PHP
Veamos ahora cómo guardar el código de barras generado dentro del disco duro. Para ello usamos file_put_contents.
<?php
/**
* Ejemplo 4 para generar códigos de barras
* con PHP
*
* Guardar código de barras en el disco duro
*
* @author parzibyte
*/
# Incluimos el autoload
require_once "vendor/autoload.php";
# Indicamos que usaremos el namespace de BarcodeGeneratorPNG
use Picqer\Barcode\BarcodeGeneratorPNG;
# Crear generador
$generador = new BarcodeGeneratorPNG();
# Ajustes
$texto = "parzibyte.me";
$tipo = $generador::TYPE_CODE_128;
$imagen = $generador->getBarcode($texto, $tipo);
# Aquí se guarda la imagen
$nombreArchivo = "codigo.png";
# Escribir los datos
$bytesEscritos = file_put_contents($nombreArchivo, $imagen);
# Comprobar si todo fue bien
if ($bytesEscritos !== false) {
echo "Correcto. Se escribieron $bytesEscritos bytes en $nombreArchivo";
} else {
echo "Error guardando código de barras";
}
Si todo va bien, la imagen será guardada. Ya dije que esto podemos hacerlo igualmente con una imagen JPG
Forzar descarga de código de barras PNG
Primero que todo te invito a leer este tutorial para saber más sobre el tema. Ahora sí veamos el código:
<?php
/**
* Ejemplo 5 para generar códigos de barras
* con PHP
*
* Forzar descarga de imagen con código de barras
*
* @author parzibyte
*/
# Incluimos el autoload
require_once "vendor/autoload.php";
# Indicamos que usaremos el namespace de BarcodeGeneratorPNG
use Picqer\Barcode\BarcodeGeneratorPNG;
# Crear generador
$generador = new BarcodeGeneratorPNG();
# Ajustes
$texto = "parzibyte.me";
$tipo = $generador::TYPE_CODE_128;
$imagen = $generador->getBarcode($texto, $tipo);
# Sugerir nombre para guardar
$nombreArchivo = "codigo_de_barras.png";
# Imprimir encabezados
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=$nombreArchivo");
echo $imagen;
# No imprimas nada después de esto
Es como en donde mostrábamos la imagen en el navegador pero con encabezados adicionales.
Generar código de barras a partir de parámetro GET
Para profundizar más dentro de todo este recorrido sobre códigos de barras veamos un ejemplo en donde se genera el código de barras dependiendo de lo que le pases en la URL. Por ejemplo, si la url es:
generar.php?texto=Hola
Debe generar una imagen con el código de barras correspondiente al texto Hola.
<?php
/**
* Ejemplo 6 para generar códigos de barras
* con PHP
*
* Generar código y mostrar dependiendo de parámetro GET
*
* @author parzibyte
*/
# Si no hay parámetro, salir
# https://parzibyte.me/blog/2018/08/09/isset-vs-empty-en-php/
if(empty($_GET["texto"])) exit("No proporcionaste el texto en la URL");
# Incluimos el autoload
require_once "vendor/autoload.php";
# Indicamos que usaremos el namespace de BarcodeGeneratorPNG
use Picqer\Barcode\BarcodeGeneratorPNG;
# Crear generador
$generador = new BarcodeGeneratorPNG();
# Ajustes
$texto = $_GET["texto"];
$tipo = $generador::TYPE_CODE_128;
$imagen = $generador->getBarcode($texto, $tipo);
header("Content-type: image/png");
echo $imagen;
# No imprimas nada después de esto
Con ese código, el script va a generar un nuevo código de barras dependiendo del texto que le mandes y va a mostrarlo como imagen PNG.
Poner código de barras en etiqueta HTML
Ahora veamos cómo combinar el ejemplo anterior con HTML para generar una serie de imágenes cuya fuente o src sea el script que genera códigos de barras. Quedaría así:
<?php
/**
* Ejemplo 7 para generar códigos de barras
* con PHP
*
* Poner múltiples imágenes cuya fuente será
* el script del ejemplo 6
*
* @author parzibyte
*/
# Un arreglo de códigos para ejemplificar
$codigos = [
"123",
"666",
"parzibyte.me",
"hola",
"885548",
"php.net",
"ABC-123"
];
?>
<!-- Y ahora hacer un ciclo en donde se imprimen las imágenes -->
<?php foreach ($codigos as $codigo) {?>
<h4>Con código <?php echo $codigo; ?>: </h4>
<img src="ejemplo6.php?texto=<?php echo $codigo; ?>">
<?php }?>
De esa forma armamos algo como una API para códigos de barras con el ejemplo 6 y la consumimos en este ejemplo. Aquí la salida:
Más opciones para personalizar código de barras
Para terminar con el tutorial, veamos otras opciones que se pueden personalizar y mandar como tercer, cuarto y quinto parámetro:
- Anchura de la barra: un factor que dice qué tan ancha debería ser cada barra, debe ser un entero. Ojo que esto indica el factor por el que va a multiplicar la anchura de cada barra, no la anchura total.
- Altura: la altura del código de barras, igualmente como entero
- Color: un color RGB pero en forma de arreglo, por ejemplo [250, 125, 0]. Me costó media hora averiguar esto y tuve que analizar el código para saberlo.
Con el siguiente código se explica mejor:
<?php
/**
* Ejemplo 8 para generar códigos de barras
* con PHP
*
* Cambiar color, anchura y altura
*
* @author parzibyte
*/
# Incluimos el autoload
require_once "vendor/autoload.php";
# Indicamos que usaremos el namespace de BarcodeGeneratorPNG
use Picqer\Barcode\BarcodeGeneratorPNG;
# Crear generador
$generador = new BarcodeGeneratorPNG();
# Ajustes
$texto = "parzibyte.me";
$tipo = $generador::TYPE_CODE_128;
$factorAnchura = 4; # En pixeles
$altura = 200; # En pixeles
# Sería el color #8bc34a (mi favorito) en RGB
$color = array(139, 195, 74);
#Recomiendo: https://parzibyte.me/blog/2018/10/11/sintaxis-corta-array-php/
$imagen = $generador->getBarcode($texto, $tipo, $factorAnchura, $altura, $color);
# Encabezado para que el navegador sepa que es una imagen
header("Content-type: image/png");
# Hora de imprimir
echo $imagen;
De esta manera sale un código así:
Conclusiones
Así de fácil, sencillo y divertido es generar códigos de barras con PHP y esta maravillosa librería llamada PHP Barcode Generator.
Mira más sobre PHP aquí.
Pingback: Instalar imagick para PHP en Linux Ubuntu - Parzibyte's blog
Pingback: Crear códigos QR con PHP y qr code - Parzibyte's blog