github chillerlan/php-qrcode 5.0.0

latest releases: 5.0.2, 4.4.1, 5.0.1...
11 months ago

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!

Ko-fi Paypal

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/ 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-gd or ext-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 src into an <img> tag. This can be disabled by setting QROptions::$outputBase64 to false.
  • [breaking] The default value of QROptions::$imageTransparent has been set to false due 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 the QROptions::$moduleValues array have changed. QRMatrix::M_*_DARK constants 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 QRMarkup has been changed to abstract, inheritors are now QRMarkupHTML and QRMarkupSVG (QRMarkupXML anyone?).
  • [possibly breaking] The fill-opacity attribute (and its respective setting QROptions::$svgOpacity) has been removed from QRMarkupSVG::path() as it can be set by CSS.
  • [possibly breaking] The QROptions::$markupDark and QROptions::$markupLight settings have been removed - they can be set via overriding QRMarkup::getDefaultModuleValue().
  • [possibly breaking] The QROptions::$textDark and QROptions::$textLight settings have been removed - they can be set via overriding QRString::getDefaultModuleValue().
  • The module value validation method QROutputInterface::moduleValueIsValid() is now public 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::$jpegQuality and QROptions::$pngCompression have been deprecated in favor of the more generic QROptions::$quality.
  • The setting QROptions::$svgUseFillAttributes has been added to toggle fill attributes on the SVG <path> elements in QRMarkupSVG::path() (this was previously done via setting QROptions::$markupDark and QROptions::$markupLight to an empty value).

Don't miss a new php-qrcode release

NewReleases is sending notifications on new releases.