Plugin ESC POS v3

Failed to load image al usar escpos-php de Mike42

En este post voy a relatar un error que aparece al comunicarse con impresoras térmicas desde PHP usando la librería ESC POS de Mike42. En este caso el error es Failed to load image que ocurre cuando queremos imprimir una imagen en una impresora térmica.

Recuerda que este error aparece si la imagen no es válida, no existe, no tienes la extensión gd y/o imagick, etcétera. Pero si crees que cuentas con todo eso y te sigue dando problemas entonces sigue leyendo.

Te lo repito: antes de revisar la solución listada más adelante, por favor comprueba que la imagen que quieres imprimir existe y que tienes habilitadas las extensiones necesarias.

Causa del problema

Como te dije, al imprimir en impresoras térmicas desde PHP aparece un error que no debería ocurrir y dice “Failed to load image” al usar gd.

Fui al código fuente y revisando me di cuenta de que se usa gd invocando a imagecreatefrompng y similares, el problema es cuando se invoca a la función is_resource por alguna razón devuelve false aunque el resource sí es válido.

Investigando me di cuenta que esto pasa en las últimas versiones de PHP, a partir de la versión 7. Parece que is_resource devuelve false incluso si el resource es válido. Al comprobar esto, la librería genera la excepción de Failed to load image.

Solución

Si usas PHP 7 y tienes este problema, entonces simplemente actualiza la librería a la versión 4.0. De hecho en el release de esa versión el desarrollador indica que la versión 4 ya no es compatible con versiones menores a la 7.3 y que se arregló un bug que tiene que ver con imagick. Citando:

Bug fixes:

Using the GD library to load images would result in an error on PHP 8. This was due to a change to the GD interface from PHP 8.0.

No sé si esa es la causa, pero lo que sí sé es que esa es la solución. Entonces si tienes una versión de la librería menor a la 4, simplemente actualiza a la 4.0 y luego ejecuta composer update.

Para terminar te dejo con un ejemplo de cómo se ve mi composer.json, lo importante es la librería de mike42 en la línea 3:

{
    "require": {
        "mike42/escpos-php": "^4.0",
        "ramsey/uuid": "^4.1"
    },
    "autoload": {
        "psr-4": {
            "Parzibyte\\": "Parzibyte/"
        }
    }
}

Por cierto, ya que hablamos de impresoras térmicas te invito a probar mi plugin que puede ser consumido desde cualquier lenguaje de programación, tiene varias características, es rápido, no requiere dependencias y además es gratuito:

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/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

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…

2 semanas 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…

2 semanas 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…

2 semanas hace

Errores de Comlink y algunas soluciones

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

2 semanas 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…

2 semanas hace

Esta web usa cookies.