php

Generar y guardar imágenes de códigos de barras con PHP

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:

Código de barras generado con PHP escaneado

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últiples códigos de barras generados con PHP

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í:

Código de barras con color, altura y anchura personalizados

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í.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

3 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

3 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

3 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

3 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

3 días hace

Solución: Apache – Server unable to read htaccess file

Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…

4 días hace

Esta web usa cookies.