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.
Si quieres navegar por el código fuente, visita el repositorio de GitHub.
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.
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.
Puedes usar cualquier tipo soportado por la librería. A la fecha son los siguientes:
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
.
Ya vimos allá arriba el HTML, pero esta librería también permite generar códigos de barras como:
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.
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.
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
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.
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.
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:
Para terminar con el tutorial, veamos otras opciones que se pueden personalizar y mandar como tercer, cuarto y quinto parámetro:
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í:
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í.
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…
Esta web usa cookies.
Ver comentarios