|
@@ -9,19 +9,22 @@ namespaced, cleaned up, improved and other stuff.
|
|
|
[![Coverage][coverage-badge]][coverage]
|
|
[![Coverage][coverage-badge]][coverage]
|
|
|
[![Scrunitizer][scrutinizer-badge]][scrutinizer]
|
|
[![Scrunitizer][scrutinizer-badge]][scrutinizer]
|
|
|
[![packagist][downloads-badge]][downloads]
|
|
[![packagist][downloads-badge]][downloads]
|
|
|
|
|
+[![paypal][donate-badge]][donate]
|
|
|
|
|
|
|
|
-[packagist-badge]: https://img.shields.io/packagist/v/chillerlan/php-qrcode.svg
|
|
|
|
|
|
|
+[packagist-badge]: https://img.shields.io/packagist/v/chillerlan/php-qrcode.svg?style=flat-square
|
|
|
[packagist]: https://packagist.org/packages/chillerlan/php-qrcode
|
|
[packagist]: https://packagist.org/packages/chillerlan/php-qrcode
|
|
|
-[license-badge]: https://img.shields.io/packagist/l/chillerlan/php-qrcode.svg
|
|
|
|
|
|
|
+[license-badge]: https://img.shields.io/packagist/l/chillerlan/php-qrcode.svg?style=flat-square
|
|
|
[license]: https://github.com/codemasher/php-qrcode/blob/master/LICENSE
|
|
[license]: https://github.com/codemasher/php-qrcode/blob/master/LICENSE
|
|
|
-[travis-badge]: https://img.shields.io/travis/codemasher/php-qrcode.svg
|
|
|
|
|
|
|
+[travis-badge]: https://img.shields.io/travis/codemasher/php-qrcode.svg?style=flat-square
|
|
|
[travis]: https://travis-ci.org/codemasher/php-qrcode
|
|
[travis]: https://travis-ci.org/codemasher/php-qrcode
|
|
|
-[coverage-badge]: https://img.shields.io/codecov/c/github/codemasher/php-qrcode.svg
|
|
|
|
|
|
|
+[coverage-badge]: https://img.shields.io/codecov/c/github/codemasher/php-qrcode.svg?style=flat-square
|
|
|
[coverage]: https://codecov.io/github/codemasher/php-qrcode
|
|
[coverage]: https://codecov.io/github/codemasher/php-qrcode
|
|
|
-[scrutinizer-badge]: https://img.shields.io/scrutinizer/g/codemasher/php-qrcode.svg
|
|
|
|
|
|
|
+[scrutinizer-badge]: https://img.shields.io/scrutinizer/g/codemasher/php-qrcode.svg?style=flat-square
|
|
|
[scrutinizer]: https://scrutinizer-ci.com/g/codemasher/php-qrcode
|
|
[scrutinizer]: https://scrutinizer-ci.com/g/codemasher/php-qrcode
|
|
|
-[downloads-badge]: https://img.shields.io/packagist/dt/chillerlan/php-qrcode.svg
|
|
|
|
|
|
|
+[downloads-badge]: https://img.shields.io/packagist/dt/chillerlan/php-qrcode.svg?style=flat-square
|
|
|
[downloads]: https://packagist.org/packages/chillerlan/php-qrcode/stats
|
|
[downloads]: https://packagist.org/packages/chillerlan/php-qrcode/stats
|
|
|
|
|
+[donate-badge]: https://img.shields.io/badge/donate-paypal-ff33aa.svg?style=flat-square
|
|
|
|
|
+[donate]: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=WLYUNAT9ZTJZ4
|
|
|
|
|
|
|
|
## Documentation
|
|
## Documentation
|
|
|
|
|
|
|
@@ -119,19 +122,28 @@ foreach($matrix->matrix() as $y => $row){
|
|
|
}
|
|
}
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-#### Authenticator example
|
|
|
|
|
-[codemasher/php-googleauth](https://github.com/codemasher/php-googleauth) features creation of `otpauth://` URIs for use with most mobile authenticators:
|
|
|
|
|
|
|
+#### Authenticator trait
|
|
|
|
|
+This library includes [codemasher/php-authenticator](https://github.com/codemasher/php-authenticator) to create `otpauth://` QR Codes for use with mobile authenticators, all in a single trait:
|
|
|
```php
|
|
```php
|
|
|
-use chillerlan\GoogleAuth\Authenticator;
|
|
|
|
|
|
|
+use chillerlan\QRCode\{QRCode, QROptions, Traits\QRAuthenticator};
|
|
|
|
|
|
|
|
-$authenticator = new Authenticator;
|
|
|
|
|
|
|
+class MyAuthenticatorClass{
|
|
|
|
|
+ use QRAuthenticator;
|
|
|
|
|
|
|
|
-$secret = $authenticator->createSecret(); // -> save this with the userdata
|
|
|
|
|
-$data = $authenticator->getUri($secret, 'test', 'smiley.codes');
|
|
|
|
|
-
|
|
|
|
|
-$qr = $qrcode->render($data);
|
|
|
|
|
|
|
+ public function getQRCode(){
|
|
|
|
|
+
|
|
|
|
|
+ // data fetched from wherever
|
|
|
|
|
+ $this->authenticatorSecret = 'SECRETTEST234567';
|
|
|
|
|
+ $label = 'my label';
|
|
|
|
|
+ $issuer = 'example.com';
|
|
|
|
|
+
|
|
|
|
|
+ // set QROptions options if needed
|
|
|
|
|
+ $this->qrOptions = new QROptions(['outputType' => QRCode::OUTPUT_MARKUP_SVG]);
|
|
|
|
|
+
|
|
|
|
|
+ return $this->getURIQRCode($label, $issuer);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
-// do stuff
|
|
|
|
|
|
|
+}
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
Have a look [in this folder](https://github.com/codemasher/php-qrcode/tree/master/examples) for some more usage examples.
|
|
Have a look [in this folder](https://github.com/codemasher/php-qrcode/tree/master/examples) for some more usage examples.
|
|
@@ -214,8 +226,9 @@ Instead of bloating your code you can simply create your own output interface by
|
|
|
class MyCustomOutput extends QROutputAbstract{
|
|
class MyCustomOutput extends QROutputAbstract{
|
|
|
|
|
|
|
|
// inherited from QROutputAbstract
|
|
// inherited from QROutputAbstract
|
|
|
- protected $matrix; // QRMatrix
|
|
|
|
|
- protected $options; // MyCustomOptions or QROptions
|
|
|
|
|
|
|
+ protected $matrix; // QRMatrix
|
|
|
|
|
+ protected $moduleCount; // length/width of the matrix
|
|
|
|
|
+ protected $options; // MyCustomOptions or QROptions
|
|
|
|
|
|
|
|
// optional constructor
|
|
// optional constructor
|
|
|
public function __construct(MyCustomOptions $options = null){
|
|
public function __construct(MyCustomOptions $options = null){
|
|
@@ -231,11 +244,10 @@ class MyCustomOutput extends QROutputAbstract{
|
|
|
// QROutputInterface::dump()
|
|
// QROutputInterface::dump()
|
|
|
public function dump(){
|
|
public function dump(){
|
|
|
$output = '';
|
|
$output = '';
|
|
|
- $size = $this->matrix->size();
|
|
|
|
|
|
|
|
|
|
- for($row = 0; $row < $size; $row++){
|
|
|
|
|
- for($col = 0; $col < $size; $col++){
|
|
|
|
|
- $output .= (string)(int)$this->matrix->check($col, $row);
|
|
|
|
|
|
|
+ for($row = 0; $row < $this->moduleCount; $row++){
|
|
|
|
|
+ for($col = 0; $col < $this->moduleCount; $col++){
|
|
|
|
|
+ $output .= (int)$this->matrix->check($col, $row);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -287,6 +299,47 @@ name | description
|
|
|
`ECC_L`, `ECC_M`, `ECC_Q`, `ECC_H`, | ECC-Level: 7%, 15%, 25%, 30% in `QROptions::$eccLevel`
|
|
`ECC_L`, `ECC_M`, `ECC_Q`, `ECC_H`, | ECC-Level: 7%, 15%, 25%, 30% in `QROptions::$eccLevel`
|
|
|
`DATA_NUMBER`, `DATA_ALPHANUM`, `DATA_BYTE`, `DATA_KANJI` | `QRDataInterface::$datamode`
|
|
`DATA_NUMBER`, `DATA_ALPHANUM`, `DATA_BYTE`, `DATA_KANJI` | `QRDataInterface::$datamode`
|
|
|
|
|
|
|
|
|
|
+#### `QROptions` properties
|
|
|
|
|
+property | type | default | allowed | description
|
|
|
|
|
+-------- | ---- | ------- | ------- | -----------
|
|
|
|
|
+`$version` | int | `QRCode::VERSION_AUTO` | 1...40 | the [QR Code version number](http://www.qrcode.com/en/about/version.html)
|
|
|
|
|
+`$versionMin` | int | 1 | 1...40 | Minimum QR version (if `$version = QRCode::VERSION_AUTO`)
|
|
|
|
|
+`$versionMax` | int | 40 | 1...40 | Maximum QR version (if `$version = QRCode::VERSION_AUTO`)
|
|
|
|
|
+`$eccLevel` | int | `QRCode::ECC_L` | `QRCode::ECC_X` | Error correct level, where X = L (7%), M (15%), Q (25%), H (30%)
|
|
|
|
|
+`$maskPattern` | int | `QRCode::MASK_PATTERN_AUTO` | 0...7 | Mask Pattern to use
|
|
|
|
|
+`$addQuietzone` | bool | true | - | Add a "quiet zone" (margin) according to the QR code spec
|
|
|
|
|
+`$quietzoneSize` | int | 4 | clamped to 0 ... `$matrixSize / 2` | Size of the quiet zone
|
|
|
|
|
+`$outputType` | string | `QRCode::OUTPUT_IMAGE_PNG` | `QRCode::OUTPUT_*` | built-in output type
|
|
|
|
|
+`$cachefile` | string | null | * | optional cache file path
|
|
|
|
|
+`$eol` | string | `PHP_EOL` | * | newline string (HTML, SVG, TEXT)
|
|
|
|
|
+`$scale` | int | 5 | * | size of a QR code pixel (SVG, IMAGE_*), HTML -> via CSS
|
|
|
|
|
+`$cssClass` | string | null | * | a common css class
|
|
|
|
|
+`$textDark` | string | '🔴' | * | string substitute for dark
|
|
|
|
|
+`$textLight` | string | '⭕' | * | string substitute for light
|
|
|
|
|
+`$imageBase64` | bool | true | - | whether to return the image data as base64 or raw like from `file_get_contents()`
|
|
|
|
|
+`$imageTransparent` | bool | true | - | toggle transparency (no jpeg support)
|
|
|
|
|
+`$imageTransparencyBG` | array | `[255, 255, 255]` | `[R, G, B]` | the RGB values for the transparent color, see [`imagecolortransparent()`](http://php.net/manual/function.imagecolortransparent.php)
|
|
|
|
|
+`$pngCompression` | int | -1 | -1 ... 9 | `imagepng()` compression level, -1 = auto
|
|
|
|
|
+`$jpegQuality` | int | 85 | 0 - 100 | `imagejpeg()` quality
|
|
|
|
|
+`$moduleValues` | array | array | array | Module values map, see [Custom output modules](#custom-output-modules)
|
|
|
|
|
+
|
|
|
|
|
+#### `QRAuthenticator` trait methods
|
|
|
|
|
+method | return | description
|
|
|
|
|
+------ | ------ | -----------
|
|
|
|
|
+`getURIQRCode(string $label, string $issuer)` | `QRCode::render()` | protected
|
|
|
|
|
+`getAuthenticator()` | `Authenticator` | protected, returns an `Authenticator` object with the given settings
|
|
|
|
|
+
|
|
|
|
|
+#### `QRAuthenticator` trait properties
|
|
|
|
|
+
|
|
|
|
|
+property | type | default | allowed | description
|
|
|
|
|
+-------- | ---- | ------- | ------- | -----------
|
|
|
|
|
+`$qrOptions` | `QROptions` | - | - | a `QROptions` object for internal use
|
|
|
|
|
+`$authenticatorSecret` | string | - | * | the secret phrase to use for the QR Code
|
|
|
|
|
+`$authenticatorDigits` | int | 6 | 6...8 |
|
|
|
|
|
+`$authenticatorPeriod` | int | 30 | 10...60 |
|
|
|
|
|
+`$authenticatorMode` | string | `totp` | `totp`, `hotp` |
|
|
|
|
|
+`$authenticatorAlgo` | string | `SHA1` | `SHA1`, `SHA256`, `SHA512` |
|
|
|
|
|
+
|
|
|
#### `QRMatrix` methods
|
|
#### `QRMatrix` methods
|
|
|
method | return | description
|
|
method | return | description
|
|
|
------ | ------ | -----------
|
|
------ | ------ | -----------
|
|
@@ -316,29 +369,6 @@ name | light (false) | dark (true) | description
|
|
|
`M_LOGO` | 20 | - | space for a logo image (not used yet)
|
|
`M_LOGO` | 20 | - | space for a logo image (not used yet)
|
|
|
`M_TEST` | 255 | 65280 | test value
|
|
`M_TEST` | 255 | 65280 | test value
|
|
|
|
|
|
|
|
-#### `QROptions` properties
|
|
|
|
|
-property | type | default | allowed | description
|
|
|
|
|
--------- | ---- | ------- | ------- | -----------
|
|
|
|
|
-`$version` | int | `QRCode::VERSION_AUTO` | 1...40 | the [QR Code version number](http://www.qrcode.com/en/about/version.html)
|
|
|
|
|
-`$versionMin` | int | 1 | 1...40 | Minimum QR version (if `$version = QRCode::VERSION_AUTO`)
|
|
|
|
|
-`$versionMax` | int | 40 | 1...40 | Maximum QR version (if `$version = QRCode::VERSION_AUTO`)
|
|
|
|
|
-`$eccLevel` | int | `QRCode::ECC_L` | `QRCode::ECC_X` | Error correct level, where X = L (7%), M (15%), Q (25%), H (30%)
|
|
|
|
|
-`$maskPattern` | int | `QRCode::MASK_PATTERN_AUTO` | 0...7 | Mask Pattern to use
|
|
|
|
|
-`$addQuietzone` | bool | true | - | Add a "quiet zone" (margin) according to the QR code spec
|
|
|
|
|
-`$quietzoneSize` | int | 4 | clamped to 0 ... `$matrixSize / 2` | Size of the quiet zone
|
|
|
|
|
-`$outputType` | string | `QRCode::OUTPUT_IMAGE_PNG` | `QRCode::OUTPUT_*` | built-in output type
|
|
|
|
|
-`$cachefile` | string | null | * | optional cache file path
|
|
|
|
|
-`$eol` | string | `PHP_EOL` | * | newline string (HTML, SVG, TEXT)
|
|
|
|
|
-`$scale` | int | 5 | * | size of a QR code pixel (SVG, IMAGE_*), HTML -> via CSS
|
|
|
|
|
-`$cssClass` | string | null | * | a common css class
|
|
|
|
|
-`$textDark` | string | '🔴' | * | string substitute for dark
|
|
|
|
|
-`$textLight` | string | '⭕' | * | string substitute for light
|
|
|
|
|
-`$imageBase64` | bool | true | - | whether to return the image data as base64 or raw like from `file_get_contents()`
|
|
|
|
|
-`$imageTransparent` | bool | true | - | toggle transparency (no jpeg support)
|
|
|
|
|
-`$imageTransparencyBG` | array | `[255, 255, 255]` | `[R, G, B]` | the RGB values for the transparent color, see [`imagecolortransparent()`](http://php.net/manual/function.imagecolortransparent.php)
|
|
|
|
|
-`$pngCompression` | int | -1 | -1 ... 9 | `imagepng()` compression level, -1 = auto
|
|
|
|
|
-`$jpegQuality` | int | 85 | 0 - 100 | `imagejpeg()` quality
|
|
|
|
|
-`$moduleValues` | array | array | array | Module values map, see [Custom output modules](#custom-output-modules)
|
|
|
|
|
|
|
|
|
|
### Notes
|
|
### Notes
|
|
|
The QR encoder, especially the subroutines for mask pattern testing, can cause high CPU load on increased matrix size.
|
|
The QR encoder, especially the subroutines for mask pattern testing, can cause high CPU load on increased matrix size.
|