| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- <?php
- /**
- * @created 18.11.2017
- * @author Smiley <smiley@chillerlan.net>
- * @copyright 2017 Smiley
- * @license MIT
- *
- * @noinspection PhpComposerExtensionStubsInspection
- */
- declare(strict_types=1);
- use chillerlan\QRCode\{QRCode, QROptions};
- use chillerlan\QRCode\Data\QRMatrix;
- require_once '../vendor/autoload.php';
- /**
- * @param array<string, mixed> $response
- */
- function sendResponse(array $response):never{
- header('Content-type: application/json;charset=utf-8;');
- echo json_encode($response);
- exit;
- }
- try{
- $moduleValues = [
- // finder
- QRMatrix::M_FINDER_DARK => $_POST['m_finder_dark'],
- QRMatrix::M_FINDER_DOT => $_POST['m_finder_dot_dark'],
- QRMatrix::M_FINDER => $_POST['m_finder_light'],
- // alignment
- QRMatrix::M_ALIGNMENT_DARK => $_POST['m_alignment_dark'],
- QRMatrix::M_ALIGNMENT => $_POST['m_alignment_light'],
- // timing
- QRMatrix::M_TIMING_DARK => $_POST['m_timing_dark'],
- QRMatrix::M_TIMING => $_POST['m_timing_light'],
- // format
- QRMatrix::M_FORMAT_DARK => $_POST['m_format_dark'],
- QRMatrix::M_FORMAT => $_POST['m_format_light'],
- // version
- QRMatrix::M_VERSION_DARK => $_POST['m_version_dark'],
- QRMatrix::M_VERSION => $_POST['m_version_light'],
- // data
- QRMatrix::M_DATA_DARK => $_POST['m_data_dark'],
- QRMatrix::M_DATA => $_POST['m_data_light'],
- // darkmodule
- QRMatrix::M_DARKMODULE => $_POST['m_darkmodule_dark'],
- // separator
- QRMatrix::M_SEPARATOR => $_POST['m_separator_light'],
- // quietzone
- QRMatrix::M_QUIETZONE => $_POST['m_quietzone_light'],
- // logo
- QRMatrix::M_LOGO => $_POST['m_logo_light'],
- ];
- $moduleValues = array_map(function($v){
- if(preg_match('/[a-f\d]{6}/i', $v) === 1){
- return in_array($_POST['output_type'], ['png', 'jpg', 'gif'], true)
- ? array_map('hexdec', str_split($v, 2))
- : '#'.$v ;
- }
- return null;
- }, $moduleValues);
- $ecc = in_array($_POST['ecc'], ['L', 'M', 'Q', 'H'], true) ? $_POST['ecc'] : 'L';
- $options = new QROptions([
- 'version' => (int)$_POST['version'],
- 'eccLevel' => constant('chillerlan\\QRCode\\Common\\EccLevel::'.$ecc),
- 'maskPattern' => (int)$_POST['maskpattern'],
- 'addQuietzone' => isset($_POST['quietzone']),
- 'quietzoneSize' => (int)$_POST['quietzonesize'],
- 'moduleValues' => $moduleValues,
- 'outputType' => $_POST['output_type'],
- 'scale' => (int)$_POST['scale'],
- 'outputBase64' => true,
- 'imageTransparent' => false,
- ]);
- $qrcode = (new QRCode($options))->render($_POST['inputstring']);
- if(in_array($_POST['output_type'], ['png', 'jpg', 'gif', 'svg'], true)){
- $qrcode = '<img alt="qrcode" src="'.$qrcode.'" />';
- }
- elseif($_POST['output_type'] === 'text'){
- $qrcode = '<pre style="font-size: 75%; line-height: 1;">'.$qrcode.'</pre>';
- }
- elseif($_POST['output_type'] === 'json'){
- $qrcode = '<pre style="font-size: 75%; overflow-x: auto;">'.$qrcode.'</pre>';
- }
- sendResponse(['qrcode' => $qrcode]);
- }
- // Pokémon exception handler
- catch(Throwable $e){
- header('HTTP/1.1 500 Internal Server Error');
- sendResponse(['error' => $e->getMessage()]);
- }
|