Question:
Date: 27-02-2025 08:12:29
(In Spanish)
Hay una discusión dentro de GitHub donde se plantea esto, aquí el enlace https://github.com/chillerlan/php-qrcode/discussions/62 pero la solución planteada es incompleta, parece que los fabricantes de esta librería están casados con Composer y no quieren dar una alternativa sin esta dependencia.
Debo decirles que después de estar luchando toda una mañana, logre hacer funcionar la parte del código que a mi me interesaba, la generación de códigos QR, sin composer.
Para empezar debemos descargar la última versión de la librería (con soporte para PHP 8), aquí el repositorio de GitHub: https://github.com/chillerlan/php-qrcode, bajamos la "main".
También tenemos que descargar la dependencia "settings", aquí el repositorio de GitHub: https://github.com/chillerlan/php-settings-container. De éste último paquete lo que nos interesa son 2 archivos php:
/src/SettingsContainerAbstract.php
/src/SettingsContainerInterface.php
Estos dos archivos debemos ponerlos dentro de la librería php-qrcode, creando una carpeta "Settings" dentro de su /src/, o sea, quedarían:
/php-qrcode/src/Settings/SettingsContainerAbstract.php
/php-qrcode/src/Settings/SettingsContainerInterface.php
Para poder hacer uso de esta librería es necesario incluir algunos archivos en el lugar donde vamos a utlizarla, podemos hacer algo como:
En lo personal me cree un archivo tipo "bootstrap" con una clase Helper para simplificar la inclusión de la librería donde la necesito y hacer un uso más "friendly". Para esto cree dentro de la carpeta de la librería /php-qrcode/ un archivo llamado phpqrcode.php que incluyo donde debo hacer uso de la librería:
Aquí el código de phpqrcode.php:
Ejemplo de uso:
Seguro esta integración podrá ser mejorada, si alguien tiene algo que aportar los escucho.
Saludos y buen código! Votes: 0 - Answers: 0 - Views: 3 Share on: Google Facebook Twitter LinkedIn Link
[Aporte] API: chillerlan php-qrcode SIN Composer[Resolved]
Para los que algunas vez se han preguntado como instalar la librería https://github.com/chillerlan/php-qrcode SIN Composer aquí les dejo mi experiencia.Hay una discusión dentro de GitHub donde se plantea esto, aquí el enlace https://github.com/chillerlan/php-qrcode/discussions/62 pero la solución planteada es incompleta, parece que los fabricantes de esta librería están casados con Composer y no quieren dar una alternativa sin esta dependencia.
Debo decirles que después de estar luchando toda una mañana, logre hacer funcionar la parte del código que a mi me interesaba, la generación de códigos QR, sin composer.
Para empezar debemos descargar la última versión de la librería (con soporte para PHP 8), aquí el repositorio de GitHub: https://github.com/chillerlan/php-qrcode, bajamos la "main".
También tenemos que descargar la dependencia "settings", aquí el repositorio de GitHub: https://github.com/chillerlan/php-settings-container. De éste último paquete lo que nos interesa son 2 archivos php:
/src/SettingsContainerAbstract.php
/src/SettingsContainerInterface.php
Estos dos archivos debemos ponerlos dentro de la librería php-qrcode, creando una carpeta "Settings" dentro de su /src/, o sea, quedarían:
/php-qrcode/src/Settings/SettingsContainerAbstract.php
/php-qrcode/src/Settings/SettingsContainerInterface.php
Para poder hacer uso de esta librería es necesario incluir algunos archivos en el lugar donde vamos a utlizarla, podemos hacer algo como:
// Requiere las clases necesarias directamente require_once __DIR__ . '/src/QRCodeException.php'; require_once __DIR__ . '/src/Output/QRCodeOutputException.php'; require_once __DIR__ . '/src/Common/Version.php'; require_once __DIR__ . '/src/Common/EccLevel.php'; require_once __DIR__ . '/src/Common/MaskPattern.php'; require_once __DIR__ . '/src/Common/Mode.php'; require_once __DIR__ . '/src/Common/BitBuffer.php'; require_once __DIR__ . '/src/Common/GenericGFPoly.php'; require_once __DIR__ . '/src/Common/GF256.php'; require_once __DIR__ . '/src/Data/QRDataModeInterface.php'; require_once __DIR__ . '/src/Data/QRDataModeAbstract.php'; require_once __DIR__ . '/src/Data/Number.php'; require_once __DIR__ . '/src/Data/AlphaNum.php'; require_once __DIR__ . '/src/Data/Kanji.php'; require_once __DIR__ . '/src/Data/Hanzi.php'; require_once __DIR__ . '/src/Data/Byte.php'; require_once __DIR__ . '/src/Data/QRData.php'; require_once __DIR__ . '/src/Data/QRMatrix.php'; require_once __DIR__ . '/src/Data/ReedSolomonEncoder.php'; require_once __DIR__ . '/src/Settings/SettingsContainerInterface.php'; require_once __DIR__ . '/src/Settings/SettingsContainerAbstract.php'; require_once __DIR__ . '/src/Output/CssColorModuleValueTrait.php'; require_once __DIR__ . '/src/Output/QROutputInterface.php'; require_once __DIR__ . '/src/Output/QROutputAbstract.php'; require_once __DIR__ . '/src/Output/RGBArrayModuleValueTrait.php'; require_once __DIR__ . '/src/Output/QRGdImage.php'; require_once __DIR__ . '/src/Output/QRMarkup.php'; require_once __DIR__ . '/src/Output/QRMarkupSVG.php'; require_once __DIR__ . '/src/Output/QRGdImagePNG.php'; require_once __DIR__ . '/src/QROptionsTrait.php'; require_once __DIR__ . '/src/QRCodeReaderOptionsTrait.php'; require_once __DIR__ . '/src/QRCode.php'; require_once __DIR__ . '/src/QROptions.php';
En lo personal me cree un archivo tipo "bootstrap" con una clase Helper para simplificar la inclusión de la librería donde la necesito y hacer un uso más "friendly". Para esto cree dentro de la carpeta de la librería /php-qrcode/ un archivo llamado phpqrcode.php que incluyo donde debo hacer uso de la librería:
Aquí el código de phpqrcode.php:
<?php // Requiere las clases necesarias directamente require_once __DIR__ . '/src/QRCodeException.php'; require_once __DIR__ . '/src/Output/QRCodeOutputException.php'; require_once __DIR__ . '/src/Common/Version.php'; require_once __DIR__ . '/src/Common/EccLevel.php'; require_once __DIR__ . '/src/Common/MaskPattern.php'; require_once __DIR__ . '/src/Common/Mode.php'; require_once __DIR__ . '/src/Common/BitBuffer.php'; require_once __DIR__ . '/src/Common/GenericGFPoly.php'; require_once __DIR__ . '/src/Common/GF256.php'; require_once __DIR__ . '/src/Data/QRDataModeInterface.php'; require_once __DIR__ . '/src/Data/QRDataModeAbstract.php'; require_once __DIR__ . '/src/Data/Number.php'; require_once __DIR__ . '/src/Data/AlphaNum.php'; require_once __DIR__ . '/src/Data/Kanji.php'; require_once __DIR__ . '/src/Data/Hanzi.php'; require_once __DIR__ . '/src/Data/Byte.php'; require_once __DIR__ . '/src/Data/QRData.php'; require_once __DIR__ . '/src/Data/QRMatrix.php'; require_once __DIR__ . '/src/Data/ReedSolomonEncoder.php'; require_once __DIR__ . '/src/Settings/SettingsContainerInterface.php'; require_once __DIR__ . '/src/Settings/SettingsContainerAbstract.php'; require_once __DIR__ . '/src/Output/CssColorModuleValueTrait.php'; require_once __DIR__ . '/src/Output/QROutputInterface.php'; require_once __DIR__ . '/src/Output/QROutputAbstract.php'; require_once __DIR__ . '/src/Output/RGBArrayModuleValueTrait.php'; require_once __DIR__ . '/src/Output/QRGdImage.php'; require_once __DIR__ . '/src/Output/QRMarkup.php'; require_once __DIR__ . '/src/Output/QRMarkupSVG.php'; require_once __DIR__ . '/src/Output/QRGdImagePNG.php'; require_once __DIR__ . '/src/QROptionsTrait.php'; require_once __DIR__ . '/src/QRCodeReaderOptionsTrait.php'; require_once __DIR__ . '/src/QRCode.php'; require_once __DIR__ . '/src/QROptions.php'; use chillerlan\QRCode\QRCode; use chillerlan\QRCode\QROptions; class PHPQRCodeHelper { /** * Este método devuelve una img png en base 64 * El parametro 'eccLevel' es el nivel de corrección de errores, determina cuántos datos puede "recuperar" el QR si está dañado, hay 4 niveles: * QRCode::ECC_L (Low): ~7% de los datos pueden ser restaurados (genera códigos más compactos, útiles si necesitas ahorrar espacio). * QRCode::ECC_M (Medium): ~15% de los datos pueden ser restaurados. * QRCode::ECC_Q (Quartile): ~25% de los datos pueden ser restaurados (es un buen balance si esperas que el QR pueda dañarse levemente (doblez, manchas, etc.). * QRCode::ECC_H (High): ~30% de los datos pueden ser restaurados. * El parametro 'scale' define el tamaño de cada "módulo" (el cuadradito negro del QR): * scale: 2: módulos pequeños ? código QR compacto. * scale: 10: módulos grandes ? código QR más grande y fácil de escanear. * Usa 2 si necesitas un QR chico (para tickets, por ejemplo). * Usa 10 si el QR debe ser leído desde cierta distancia (carteles, etiquetas grandes). * @param type $urlQr URL que se codifica en la imagen * @return type The encoded data base 64, as a string. */ public static function generateQrPngBase64($urlQr, $scale = 10) { $options = new QROptions([ 'eccLevel' => chillerlan\QRCode\Common\EccLevel::Q, //es el valor para 'eccLevel' => QRCode::ECC_Q 'outputInterface' => chillerlan\QRCode\Output\QRGdImagePNG::class, // Usar la interfaz para imágenes PNG 'outputType' => 2, // 2 es el valor para QRCode::OUTPUT_IMAGE_PNG 'scale' => $scale, 'imageBase64' => false, 'imageTransparent' => false ]); $qrCode = new QRCode($options); $qrImage = $qrCode->render($urlQr); return $qrImage; } }
Ejemplo de uso:
//incluyo el archivo bootstrap: require_once PATH_LIB . 'php-qrcode/phpqrcode.php' $urlQr = 'https://www.phpcentral.com/'; //genero el QR: $imgPngBase64 = PHPQRCodeHelper::generateQrPngBase64($urlQr); //muestro el QR (acá pueden hacer lo que quieran, bajarlo a un archivo físico, adjuntarlo en un PDF, etc.): header ('Content-Type: image/png'); echo $imgPngBase64;
Seguro esta integración podrá ser mejorada, si alguien tiene algo que aportar los escucho.
Saludos y buen código! Votes: 0 - Answers: 0 - Views: 3 Share on: Google Facebook Twitter LinkedIn Link
Answers:
No replies for this question, be the first to answer.
To actively participate in the community first must authenticate, enter the system.Sign In