Service.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <?php
  2. namespace addons\pickup\library;
  3. use Endroid\QrCode\ErrorCorrectionLevel;
  4. class Service
  5. {
  6. /**
  7. * 生成二维码
  8. * @param $params
  9. * @return \Endroid\QrCode\QrCode
  10. * @throws \Endroid\QrCode\Exception\InvalidPathException
  11. */
  12. public static function qrcode($params)
  13. {
  14. $params = is_array($params) ? $params : [$params];
  15. // 前景色
  16. list($r, $g, $b) = sscanf($params['foreground']??'#000000', "#%02x%02x%02x");
  17. $foregroundcolor = ['r' => $r, 'g' => $g, 'b' => $b];
  18. // 背景色
  19. list($r, $g, $b) = sscanf($params['background']??'#ffffff', "#%02x%02x%02x");
  20. $backgroundcolor = ['r' => $r, 'g' => $g, 'b' => $b];
  21. // 创建实例
  22. $qrCode = new \Endroid\QrCode\QrCode($params['text']??request()->domain().'/addons/pickup#/pages/index/index');
  23. $qrCode->setSize($params['size']??250);
  24. // 高级选项
  25. $qrCode->setWriterByName($params['format']??'png');
  26. $qrCode->setMargin($params['padding']??10);
  27. $qrCode->setEncoding('UTF-8');
  28. $qrCode->setErrorCorrectionLevel(new ErrorCorrectionLevel($params['errorlevel']??'quartile'));
  29. $qrCode->setForegroundColor($foregroundcolor);
  30. $qrCode->setBackgroundColor($backgroundcolor);
  31. $qrCode->setRoundBlockSize(true);
  32. $qrCode->setValidateResult(false);
  33. $qrCode->setWriterOptions(['exclude_xml_declaration' => true]);
  34. return $qrCode;
  35. }
  36. }