Không có mô tả

smiley 5c948cffd4 :book: remove remaining instances of empty() 2 tháng trước cách đây
.github 24d4e6f788 :octocat: not yet 3 tháng trước cách đây
.idea d65911ada9 :octocat: dependency update & phpstan happy 6 tháng trước cách đây
.phan 2f404ba8ee :octocat: 5 tháng trước cách đây
.phpdoc 22869ae8e2 :book: 1 năm trước cách đây
benchmark e6b1ff0ada :octocat: run phpstan on the benchmarks 1 năm trước cách đây
docs 5c948cffd4 :book: remove remaining instances of empty() 2 tháng trước cách đây
examples bf34b46c57 :octocat: reintroducing phan because phpstan keeps making trouble 5 tháng trước cách đây
src 2b7c9b7020 :octocat: remove remaining instances of empty() 2 tháng trước cách đây
tests 01ff29439d :octocat: DataInterfaceTestAbstract::testValidateString() added an additional test (see #313) 3 tháng trước cách đây
.editorconfig 826f9cfa65 :octocat: 2 năm trước cách đây
.gitattributes 89cdd09044 :octocat: switch phan for phpstan (see #277) 1 năm trước cách đây
.gitignore 89cdd09044 :octocat: switch phan for phpstan (see #277) 1 năm trước cách đây
.readthedocs.yml 6a44b067ef :sparkles: fuck it, read the docs 2 năm trước cách đây
LICENSE-ASL-2.0 66c0b69ffb :octocat: added Apache-2.0 license 3 năm trước cách đây
LICENSE-MIT 66c0b69ffb :octocat: added Apache-2.0 license 3 năm trước cách đây
NOTICE ff147426a1 :octocat: moved some files 2 năm trước cách đây
README.md 9cf399d8c3 :octocat: 9 tháng trước cách đây
composer.json bf34b46c57 :octocat: reintroducing phan because phpstan keeps making trouble 5 tháng trước cách đây
phpbench.json f31eff72f5 :sparkles: add PHPBench to run benchmarks 1 năm trước cách đây
phpcs.xml.dist d65911ada9 :octocat: dependency update & phpstan happy 6 tháng trước cách đây
phpdoc.xml.dist 61bf95856a :octocat: 2 năm trước cách đây
phpmd.xml.dist 10ed887663 :octocat: +phpmd command 1 năm trước cách đây
phpstan-baseline.neon d65911ada9 :octocat: dependency update & phpstan happy 6 tháng trước cách đây
phpstan.dist.neon e6b1ff0ada :octocat: run phpstan on the benchmarks 1 năm trước cách đây
phpunit.xml.dist f02b94f3e6 :shower: 1 năm trước cách đây

README.md

chillerlan/php-qrcode

A PHP QR Code generator based on the implementation by Kazuhiko Arase, namespaced, cleaned up, improved and other stuff.
It also features a QR Code reader based on a PHP port of the ZXing library.

Attention: there is now also a javascript port on NPM: @chillerlan/qrcode.

PHP Version Support Packagist version Continuous Integration CodeCov Codacy Packagist downloads Documentation

Overview

Features

  • Creation of Model 2 QR Codes, Version 1 to 40
  • ECC Levels L/M/Q/H supported
  • Mixed mode support (encoding modes can be combined within a QR symbol). Supported modes:
  • Flexible, easily extensible output modules, built-in support for the following output formats:
  • QR Code reader (via GD and ImageMagick)

Requirements

For the QR Code reader, either ext-gd or ext-imagick is required!

Documentation

Important: Please use the examples from the branch that matches your installed php-qrcode version ( v4.x, v5.x, dev-main )!
The main (default) branch is the active development for future major versions, and it is most likely incompatible with the latest release versions.

Installation with composer

See the installation guide for more info!

Terminal

composer require chillerlan/php-qrcode

composer.json

{
	"require": {
		"php": "^8.2",
		"chillerlan/php-qrcode": "dev-main#<commit_hash>"
	}
}

Note: replace dev-main with a version constraint, e.g. ^5.0 - see releases for valid versions.

Quickstart

We want to encode this URI for a mobile authenticator into a QRcode image:

$data = 'otpauth://totp/test?secret=B3JX4VCVJDVNXNZ5&issuer=chillerlan.net';

// quick and simple:
echo '<img src="'.(new QRCode)->render($data).'" alt="QR Code" />';

Wait, what was that? Please again, slower! See Advanced usage in the manual. Also, have a look in the examples folder for some more usage examples.

QR codes are awesome!

Reading QR Codes

Using the built-in QR Code reader is pretty straight-forward:

// it's generally a good idea to wrap the reader in a try/catch block because it WILL throw eventually
try{
	$result = (new QRCode)->readFromFile('path/to/file.png'); // -> DecoderResult

	// you can now use the result instance...
	$content = $result->data;
	$matrix  = $result->getMatrix(); // -> QRMatrix

	// ...or simply cast it to string to get the content:
	$content = (string)$result;
}
catch(Throwable $e){
	// oopsies!
}

Shameless advertising

Hi, please check out some of my other projects that are way cooler than qrcodes!

Disclaimer!

I don't take responsibility for molten CPUs, misled applications, failed log-ins etc.. Use at your own risk!

License notice

Trademark Notice

The word "QR Code" is a registered trademark of DENSO WAVE INCORPORATED
https://www.qrcode.com/en/faq.html#patentH2Title