Releases: chillerlan/php-qrcode
6.0.1
The following methods (property getters) have been deprecated in favor of asymmetric visibility, which is available as of PHP 8.4 and which is the minimum requirement of the next major version (v7) of php-qrcode.
The QRMatrix class will see an addition of a magic getter that emulates the future behaviour as an upgrade path, the other methods are only used internally and will see no such addition for the time being.
| method | replacement |
|---|---|
BitBuffer::getBuffer() |
BitBuffer::$buffer |
BitBuffer::getLength() |
BitBuffer::$length |
Detector::getFinderPatterns() |
Detector::$finderPatterns |
EccLevel::getLevel() |
EccLevel::$level |
ECICharset::getID() |
ECICharset::$charsetID |
FinderPattern::getCount() |
FinderPattern::$count |
GenericGFPoly::getCoefficients() |
GenericGFPoly::$coefficients |
LuminanceSourceInterface::getHeight() |
LuminanceSourceInterface::$height |
LuminanceSourceInterface::getWidth() |
LuminanceSourceInterface::$width |
LuminanceSourceInterface::getLuminances() |
LuminanceSourceInterface::$luminances |
MaskPattern::getPattern() |
MaskPattern::$currentPattern |
QRData::getBitBuffer() |
QRData::$bitBuffer |
QRMatrix::getEccLevel() |
QRMatrix::$eccLevel |
QRMatrix::getMaskPattern() |
QRMatrix::$maskPattern |
QRMatrix::getMatrix() |
QRMatrix::$matrix |
QRMatrix::getSize() |
QRMatrix::$moduleCount |
QRMatrix::getVersion() |
QRMatrix::$version |
ResultPoint::getEstimatedModuleSize() |
ResultPoint::$estimatedModuleSize |
ResultPoint::getX() |
ResultPoint::$x |
ResultPoint::getY() |
ResultPoint::$y |
Version::getVersionNumber() |
Version::$versionNumber |
The following properties as well as the method copyVars() in QROutputAbstract will be removed in v7 without replacement,
as they only existed to improve performance by circumventing the magic getters in the QROptions class - these are replaced by (set) property hooks where unnecessary overhead is reduced. Some of the built-in output classes may see the re-addition of some of these properties locally, depending on the performance impact.
QROutputAbstract::$excludeFromConnect
QROutputAbstract::$keepAsSquare
QROutputAbstract::$connectPaths
QROutputAbstract::$eol
QROutputAbstract::$drawCircularModules
QROutputAbstract::$drawLightModules
QROutputAbstract::$circleRadius
These changes are already in dev-main.
6.0.0
Hi, I've kept you waiting for too long now, so I'm going to release it "as is". Originally I planned to add support for creating Structured Append QR Codes but I'm currently lacking the mental capacity to wrap my head around this concept (a method to calculate the parity already exists in the code, feel free to submit a PR!).
Once again, a big thank you to everyone who submitted issue reports and opened discussions and helped to improve this library!
IMPORTANT: v6 will be branched out and the main branch will remain the active development branch towards v7. If you have used the composer version dev-main without a commit hash in the past, please make sure to update the requirement ASAP. You have been warned.
For feedback and questions please head over to the linked discussion!
Changelog
- General
- The required minimum PHP version is now 8.2.
- The
QRCodeconstructor now also accepts aniterableas options, which is handed over to a newQROptionsinstance internally. - Extracted
QRMatrix::getBooleanMatrix()fromQRMatrix::getMatrix()to remove type ambiguity, the optional parameter$booleanhas been removed. - Added PHPBench to run benchmarks (the results can be found in the
benchmarkbranch). - Several bugfixes, cleanup, dependency updates, documentation update and examples.
- Settings (
QROptionsTrait)- [breaking] The property
QROptions::$outputTypeand the related constants inQROutputInterfacehave been removed. The output type is now specified viaQROptions::$outputInterfacewith the default value ofQRMarkupSVG::class. (#223). - Split QR Code reader options into separate
QRCodeReaderOptionsTrait. - The magic setter for
QROptions::$eccLevelnow also accepts the string valuesL, M, Q, H(case-insensitive) - these will be converted internally to the respective integers. (#160). - The property
QROptions::$scale(module scaling for several raster image output classes) is now clamped between 1 and 50.
- [breaking] The property
- Output (
QROutputInterfaceand child classes)- [breaking] The parameter
$transformof the methodQROutputAbstract::collectModules(Closure $transform)has been removed in favor of a methodQROutputAbstract::moduleTransform():mixed|nullwhich is called with the same parameters. - Added
QRInterventionImage(intervention/image) output. - Added XML output
QRMarkupXMLincluding an XSD schemaqrcode.schema.xsd. - [possibly breaking]
QRStringJSONoverhaul, similar to XML output, including a JSON schemaqrcode.schema.json. - The GD output class now also supports the avif format via
QRGdImageAVIF. QRFpdf::dump(): allow using externalFPDFinstance.- Extracted
CssColorModuleValueTraitandRGBArrayModuleValueTraitfor use in custom output classes.
- [breaking] The parameter
5.0.5
- PHP 8.5 support (
imagedestroy()deprecation) - The parameter
$transformof the methodQROutputAbstract::collectModules(Closure $transform)has been deprecated in favor of the newly introduced methodQROutputAbstract::moduleTransform()with the same parameters as the anonymous closure. The parameter will be removed in v6. - Remaining instances of
empty()have been replaced with more precise checks. - dependency & CI updates
5.0.4
5.0.3
- PHP 8.4 support (implicit nullable types are deprecated) (#276)
- ECI decoding now allows for numeric and alphanumeric segments to be preceded by an ECI designator (#289)
- simplified Number and AlphaNum classes (backport from dev-main. v6)
- QRFpdf::dump() now accepts an
FPDFinstance as second optional parameter - dependency & CI updates
- fixed the broken PHPCS config
- added Slevomat Coding Standard
- added PHP Compatibility Coding Standard
- added PHPStorm code style
4.4.2
- PHP 8.4 support (implicit nullable types are deprecated)
- dependency & CI updates
5.0.2
- fixed a bug in the QR Code version auto detection when the given data segment was the exact same bit size as the maximum for the guessed provisional version, added a safety margin of 4 bits, which forces the next available version in that case.
5.0.1
4.4.1
5.0.0
Hi! It's been a while since the last major version - has it already been over three years and seven million downloads??? Time flies...
v5 was supposed to be released earlier this year already, but various health issues kept me from working on it and I kept y'all waiting and using dev-main and the v5-beta instead - but hey, the wait is over now!
The new version comes with countless internal changes, mostly to incooperate the ZXing QR Code reader and open the possibility for other types of barcodes, such as micro QR.
A lot of things have been deprecated and moved in order to clean up for v6 which is intended to support PHP 8.2+ (or maybe 8.3+ even). See the attached discussion thread for a full list of changes and deprecations.
IMPORTANT: v5 will be branched out and the main branch will become (or rather remain) the active development branch towards v6. If you have used the composer version dev-main without a commit hash in the past, please make sure to update the requirement ASAP. You have been warned.
Also, a big thank you to everyone who submitted issue reports and opened discussions and helped to improve this library!
New Features
- QR Code reader based on a PHP port of the ZXing library
- MIT and Apache 2.0 dual licensing to accommodate the ZXing related files, see: NOTICE
- Proper mixed mode support (several data mode segments can appear in the same QR symbol)
- Simplified Chinese (Hanzi/GB2312) support according to GBT18284-2000
- ECI mode support
Structured append mode(not yet...)
- Full "reversed reflectance" support (inverted matrix colors)
- Encapsulated Postscript (EPS) output
- An all new documentation at https://php-qrcode.readthedocs.io/en/v5.0.x/ in favor over the wiki
- A truckload of new examples
Changes
- [breaking] The default output has been changed from PNG (GdImage) to SVG. No image processing extension (
ext-gdorext-imagick) required anymore! - [breaking] The default output format of the built-in output classes is now a base64 data URI (if applicable) so that it can be directly embedded as
srcinto an<img>tag. This can be disabled by settingQROptions::$outputBase64tofalse. - [breaking] The default value of
QROptions::$imageTransparenthas been set tofalsedue to various issues and misconceptions with transparency in GD and ImageMagick, therefore: use at your own risk. - [breaking] The values of the
QRMatrix::M_*constants and therefore the keys of theQROptions::$moduleValuesarray have changed.QRMatrix::M_*_DARKconstants have been introduced for convenience. The module values are now a proper bitmask, the dark value is now calculated(QRMatrix::M_* | QRMatrix::IS_DARK)instead of(QRMatrix::M_* << 8). - [breaking] The output class
QRMarkuphas been changed toabstract, inheritors are nowQRMarkupHTMLandQRMarkupSVG(QRMarkupXMLanyone?). - [possibly breaking] The
fill-opacityattribute (and its respective settingQROptions::$svgOpacity) has been removed fromQRMarkupSVG::path()as it can be set by CSS. - [possibly breaking] The
QROptions::$markupDarkandQROptions::$markupLightsettings have been removed - they can be set via overridingQRMarkup::getDefaultModuleValue(). - [possibly breaking] The
QROptions::$textDarkandQROptions::$textLightsettings have been removed - they can be set via overridingQRString::getDefaultModuleValue(). - The module value validation method
QROutputInterface::moduleValueIsValid()is nowpublic static, so that input values can be checked before invoking the options, e.g.QRMarkupSVG::moduleValueIsValid('#aabbcc'). Please note that in case of HTML and SVG it will only check for the basic syntax, it will not validate or sanitize the values. - The GD output class now also supports BMP and WEBP output.
- The formerly GD exclusive options
QROptions::$jpegQualityandQROptions::$pngCompressionhave been deprecated in favor of the more genericQROptions::$quality. - The setting
QROptions::$svgUseFillAttributeshas been added to togglefillattributes on the SVG<path>elements inQRMarkupSVG::path()(this was previously done via settingQROptions::$markupDarkandQROptions::$markupLightto an empty value).