Reading-QRCodes.html 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489
  1. <!DOCTYPE html>
  2. <html class="writer-html5" lang="en" data-content_root="../">
  3. <head>
  4. <meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>Reading QR Codes &mdash; PHP-QRCode main
  7. Manual</title>
  8. <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=fa44fd50" />
  9. <link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=e59714d7" />
  10. <script src="../_static/jquery.js?v=5d32c60e"></script>
  11. <script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
  12. <script src="../_static/documentation_options.js?v=a8da1a53"></script>
  13. <script src="../_static/doctools.js?v=9bcbadda"></script>
  14. <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
  15. <script src="../_static/js/theme.js"></script>
  16. <link rel="index" title="Index" href="../genindex.html" />
  17. <link rel="search" title="Search" href="../search.html" />
  18. <link rel="next" title="Logos and logo space" href="Logos.html" />
  19. <link rel="prev" title="Configuration settings" href="Configuration-settings.html" />
  20. </head>
  21. <body class="wy-body-for-nav">
  22. <div class="wy-grid-for-nav">
  23. <nav data-toggle="wy-nav-shift" class="wy-nav-side">
  24. <div class="wy-side-scroll">
  25. <div class="wy-side-nav-search" >
  26. <a href="../index.html" class="icon icon-home">
  27. PHP-QRCode
  28. </a>
  29. <div role="search">
  30. <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
  31. <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
  32. <input type="hidden" name="check_keywords" value="yes" />
  33. <input type="hidden" name="area" value="default" />
  34. </form>
  35. </div>
  36. </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
  37. <p class="caption" role="heading"><span class="caption-text">Usage</span></p>
  38. <ul class="current">
  39. <li class="toctree-l1"><a class="reference internal" href="Overview.html">Overview</a><ul>
  40. <li class="toctree-l2"><a class="reference internal" href="Overview.html#features">Features</a></li>
  41. <li class="toctree-l2"><a class="reference internal" href="Overview.html#requirements">Requirements</a></li>
  42. <li class="toctree-l2"><a class="reference internal" href="Overview.html#framework-integration">Framework Integration</a></li>
  43. <li class="toctree-l2"><a class="reference internal" href="Overview.html#shameless-advertising">Shameless advertising</a></li>
  44. </ul>
  45. </li>
  46. <li class="toctree-l1"><a class="reference internal" href="Installation.html">Installation</a><ul>
  47. <li class="toctree-l2"><a class="reference internal" href="Installation.html#installation-with-composer">Installation with Composer</a><ul>
  48. <li class="toctree-l3"><a class="reference internal" href="Installation.html#composer-json">composer.json</a><ul>
  49. <li class="toctree-l4"><a class="reference internal" href="Installation.html#version-switch">Version switch</a></li>
  50. </ul>
  51. </li>
  52. <li class="toctree-l3"><a class="reference internal" href="Installation.html#terminal">Terminal</a></li>
  53. </ul>
  54. </li>
  55. <li class="toctree-l2"><a class="reference internal" href="Installation.html#manual-installation">Manual installation</a><ul>
  56. <li class="toctree-l3"><a class="reference internal" href="Installation.html#can-i-use-this-library-without-using-composer">Can I use this library without using composer?</a></li>
  57. </ul>
  58. </li>
  59. <li class="toctree-l2"><a class="reference internal" href="Installation.html#supported-php-versions-extension-requirements">Supported PHP versions &amp; extension requirements</a></li>
  60. <li class="toctree-l2"><a class="reference internal" href="Installation.html#imagemagick">ImageMagick</a></li>
  61. </ul>
  62. </li>
  63. <li class="toctree-l1"><a class="reference internal" href="Quickstart.html">Quickstart</a><ul>
  64. <li class="toctree-l2"><a class="reference internal" href="Quickstart.html#import-the-library">Import the library</a></li>
  65. <li class="toctree-l2"><a class="reference internal" href="Quickstart.html#create-your-first-qr-code">Create your first QR Code</a><ul>
  66. <li class="toctree-l3"><a class="reference internal" href="Quickstart.html#configuration">Configuration</a></li>
  67. </ul>
  68. </li>
  69. <li class="toctree-l2"><a class="reference internal" href="Quickstart.html#notes">Notes</a></li>
  70. </ul>
  71. </li>
  72. <li class="toctree-l1"><a class="reference internal" href="Advanced-usage.html">Advanced usage</a><ul>
  73. <li class="toctree-l2"><a class="reference internal" href="Advanced-usage.html#configuration-via-qroptions">Configuration via <code class="docutils literal notranslate"><span class="pre">QROptions</span></code></a><ul>
  74. <li class="toctree-l3"><a class="reference internal" href="Advanced-usage.html#supply-an-iterable-of-options">Supply an <code class="docutils literal notranslate"><span class="pre">iterable</span></code> of options</a></li>
  75. <li class="toctree-l3"><a class="reference internal" href="Advanced-usage.html#load-and-save-options-from-to-json">Load and save options from/to JSON</a></li>
  76. <li class="toctree-l3"><a class="reference internal" href="Advanced-usage.html#extending-the-qroptions-class">Extending the <code class="docutils literal notranslate"><span class="pre">QROptions</span></code> class</a></li>
  77. </ul>
  78. </li>
  79. <li class="toctree-l2"><a class="reference internal" href="Advanced-usage.html#qrcode-methods"><code class="docutils literal notranslate"><span class="pre">QRCode</span></code> methods</a><ul>
  80. <li class="toctree-l3"><a class="reference internal" href="Advanced-usage.html#render-a-qrmatrix-instance">Render a <code class="docutils literal notranslate"><span class="pre">QRMatrix</span></code> instance</a></li>
  81. <li class="toctree-l3"><a class="reference internal" href="Advanced-usage.html#mixed-mode">Mixed mode</a></li>
  82. </ul>
  83. </li>
  84. <li class="toctree-l2"><a class="reference internal" href="Advanced-usage.html#common-output-options">Common output options</a><ul>
  85. <li class="toctree-l3"><a class="reference internal" href="Advanced-usage.html#save-to-file">Save to file</a></li>
  86. <li class="toctree-l3"><a class="reference internal" href="Advanced-usage.html#base64-uri-output">Base64 URI output</a></li>
  87. <li class="toctree-l3"><a class="reference internal" href="Advanced-usage.html#return-the-image-resource">Return the image resource</a></li>
  88. </ul>
  89. </li>
  90. </ul>
  91. </li>
  92. <li class="toctree-l1"><a class="reference internal" href="Configuration-settings.html">Configuration settings</a><ul>
  93. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#version">version</a></li>
  94. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#versionmin">versionMin</a></li>
  95. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#versionmax">versionMax</a></li>
  96. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#ecclevel">eccLevel</a></li>
  97. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#maskpattern">maskPattern</a></li>
  98. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#addquietzone">addQuietzone</a></li>
  99. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#quietzonesize">quietzoneSize</a></li>
  100. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#outputinterface">outputInterface</a></li>
  101. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#returnresource">returnResource</a></li>
  102. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#cachefile">cachefile</a></li>
  103. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#outputbase64">outputBase64</a></li>
  104. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#eol">eol</a></li>
  105. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#bgcolor">bgColor</a></li>
  106. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#invertmatrix">invertMatrix</a></li>
  107. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#drawlightmodules">drawLightModules</a></li>
  108. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#drawcircularmodules">drawCircularModules</a></li>
  109. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#circleradius">circleRadius</a></li>
  110. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#keepassquare">keepAsSquare</a></li>
  111. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#connectpaths">connectPaths</a></li>
  112. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#excludefromconnect">excludeFromConnect</a></li>
  113. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#modulevalues">moduleValues</a></li>
  114. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#addlogospace">addLogoSpace</a></li>
  115. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#logospacewidth">logoSpaceWidth</a></li>
  116. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#logospaceheight">logoSpaceHeight</a></li>
  117. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#logospacestartx">logoSpaceStartX</a></li>
  118. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#logospacestarty">logoSpaceStartY</a></li>
  119. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#scale">scale</a></li>
  120. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#imagetransparent">imageTransparent</a></li>
  121. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#transparencycolor">transparencyColor</a></li>
  122. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#quality">quality</a></li>
  123. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#gdimageuseupscale">gdImageUseUpscale</a></li>
  124. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#imagickformat">imagickFormat</a></li>
  125. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#cssclass">cssClass</a></li>
  126. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#svgaddxmlheader">svgAddXmlHeader</a></li>
  127. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#svgdefs">svgDefs</a></li>
  128. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#svgpreserveaspectratio">svgPreserveAspectRatio</a></li>
  129. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#svgusefillattributes">svgUseFillAttributes</a></li>
  130. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#textlinestart">textLineStart</a></li>
  131. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#jsonflags">jsonFlags</a></li>
  132. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#fpdfmeasureunit">fpdfMeasureUnit</a></li>
  133. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#xmlstylesheet">xmlStylesheet</a></li>
  134. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#readeruseimagickifavailable">readerUseImagickIfAvailable</a></li>
  135. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#readergrayscale">readerGrayscale</a></li>
  136. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#readerinvertcolors">readerInvertColors</a></li>
  137. <li class="toctree-l2"><a class="reference internal" href="Configuration-settings.html#readerincreasecontrast">readerIncreaseContrast</a></li>
  138. </ul>
  139. </li>
  140. <li class="toctree-l1 current"><a class="current reference internal" href="#">Reading QR Codes</a><ul>
  141. <li class="toctree-l2"><a class="reference internal" href="#basic-usage">Basic usage</a></li>
  142. <li class="toctree-l2"><a class="reference internal" href="#the-luminancesourceinterface">The <code class="docutils literal notranslate"><span class="pre">LuminanceSourceInterface</span></code></a></li>
  143. <li class="toctree-l2"><a class="reference internal" href="#the-decoder">The <code class="docutils literal notranslate"><span class="pre">Decoder</span></code></a></li>
  144. <li class="toctree-l2"><a class="reference internal" href="#general-considerations">General considerations</a></li>
  145. </ul>
  146. </li>
  147. <li class="toctree-l1"><a class="reference internal" href="Logos.html">Logos and logo space</a><ul>
  148. <li class="toctree-l2"><a class="reference internal" href="Logos.html#info">Info</a></li>
  149. <li class="toctree-l2"><a class="reference internal" href="Logos.html#adding-a-logo-space">Adding a logo space</a></li>
  150. </ul>
  151. </li>
  152. </ul>
  153. <p class="caption" role="heading"><span class="caption-text">Customizing output</span></p>
  154. <ul>
  155. <li class="toctree-l1"><a class="reference internal" href="../Customizing/Module-Values.html">Module values</a><ul>
  156. <li class="toctree-l2"><a class="reference internal" href="../Customizing/Module-Values.html#basics">Basics</a></li>
  157. <li class="toctree-l2"><a class="reference internal" href="../Customizing/Module-Values.html#assigning-values">Assigning values</a></li>
  158. <li class="toctree-l2"><a class="reference internal" href="../Customizing/Module-Values.html#handling-in-your-own-qroutputinterface">Handling in your own <code class="docutils literal notranslate"><span class="pre">QROutputInterface</span></code></a><ul>
  159. <li class="toctree-l3"><a class="reference internal" href="../Customizing/Module-Values.html#setting-module-values">Setting module values</a></li>
  160. <li class="toctree-l3"><a class="reference internal" href="../Customizing/Module-Values.html#using-the-module-values">Using the module values</a></li>
  161. </ul>
  162. </li>
  163. </ul>
  164. </li>
  165. <li class="toctree-l1"><a class="reference internal" href="../Customizing/QROutputAbstract.html"><code class="docutils literal notranslate"><span class="pre">QROutputAbstract</span></code></a><ul>
  166. <li class="toctree-l2"><a class="reference internal" href="../Customizing/QROutputAbstract.html#properties">Properties</a><ul>
  167. <li class="toctree-l3"><a class="reference internal" href="../Customizing/QROutputAbstract.html#options-and-matrix"><code class="docutils literal notranslate"><span class="pre">$options</span></code> and <code class="docutils literal notranslate"><span class="pre">$matrix</span></code></a></li>
  168. <li class="toctree-l3"><a class="reference internal" href="../Customizing/QROutputAbstract.html#modulecount-scale-and-length"><code class="docutils literal notranslate"><span class="pre">$moduleCount</span></code>, <code class="docutils literal notranslate"><span class="pre">$scale</span></code> and <code class="docutils literal notranslate"><span class="pre">$length</span></code></a></li>
  169. <li class="toctree-l3"><a class="reference internal" href="../Customizing/QROutputAbstract.html#modulevalues"><code class="docutils literal notranslate"><span class="pre">$moduleValues</span></code></a></li>
  170. <li class="toctree-l3"><a class="reference internal" href="../Customizing/QROutputAbstract.html#copies-of-qroptions-values">Copies of <code class="docutils literal notranslate"><span class="pre">QROptions</span></code> values</a></li>
  171. </ul>
  172. </li>
  173. <li class="toctree-l2"><a class="reference internal" href="../Customizing/QROutputAbstract.html#methods">Methods</a><ul>
  174. <li class="toctree-l3"><a class="reference internal" href="../Customizing/QROutputAbstract.html#setmodulevalues"><code class="docutils literal notranslate"><span class="pre">setModuleValues()</span></code></a></li>
  175. <li class="toctree-l3"><a class="reference internal" href="../Customizing/QROutputAbstract.html#modulevalueisvalid"><code class="docutils literal notranslate"><span class="pre">moduleValueIsValid()</span></code></a></li>
  176. <li class="toctree-l3"><a class="reference internal" href="../Customizing/QROutputAbstract.html#preparemodulevalue"><code class="docutils literal notranslate"><span class="pre">prepareModuleValue()</span></code></a></li>
  177. <li class="toctree-l3"><a class="reference internal" href="../Customizing/QROutputAbstract.html#getdefaultmodulevalue"><code class="docutils literal notranslate"><span class="pre">getDefaultModuleValue()</span></code></a></li>
  178. <li class="toctree-l3"><a class="reference internal" href="../Customizing/QROutputAbstract.html#getmodulevalue-and-getmodulevalueat"><code class="docutils literal notranslate"><span class="pre">getModuleValue()</span></code> and <code class="docutils literal notranslate"><span class="pre">getModuleValueAt()</span></code></a></li>
  179. <li class="toctree-l3"><a class="reference internal" href="../Customizing/QROutputAbstract.html#setmatrixdimensions"><code class="docutils literal notranslate"><span class="pre">setMatrixDimensions()</span></code></a></li>
  180. <li class="toctree-l3"><a class="reference internal" href="../Customizing/QROutputAbstract.html#getoutputdimensions"><code class="docutils literal notranslate"><span class="pre">getOutputDimensions()</span></code></a></li>
  181. <li class="toctree-l3"><a class="reference internal" href="../Customizing/QROutputAbstract.html#collectmodules"><code class="docutils literal notranslate"><span class="pre">collectModules()</span></code></a></li>
  182. <li class="toctree-l3"><a class="reference internal" href="../Customizing/QROutputAbstract.html#savetofile-and-tobase64datauri"><code class="docutils literal notranslate"><span class="pre">saveToFile()</span></code> and <code class="docutils literal notranslate"><span class="pre">toBase64DataURI()</span></code></a></li>
  183. </ul>
  184. </li>
  185. </ul>
  186. </li>
  187. <li class="toctree-l1"><a class="reference internal" href="../Customizing/Custom-output-interface.html">Custom <code class="docutils literal notranslate"><span class="pre">QROutputInterface</span></code></a><ul>
  188. <li class="toctree-l2"><a class="reference internal" href="../Customizing/Custom-output-interface.html#class-skeleton">Class skeleton</a></li>
  189. <li class="toctree-l2"><a class="reference internal" href="../Customizing/Custom-output-interface.html#module-values">Module values</a></li>
  190. <li class="toctree-l2"><a class="reference internal" href="../Customizing/Custom-output-interface.html#transform-the-output">Transform the output</a></li>
  191. <li class="toctree-l2"><a class="reference internal" href="../Customizing/Custom-output-interface.html#run-the-custom-output">Run the custom output</a></li>
  192. <li class="toctree-l2"><a class="reference internal" href="../Customizing/Custom-output-interface.html#summary">Summary</a></li>
  193. </ul>
  194. </li>
  195. </ul>
  196. <p class="caption" role="heading"><span class="caption-text">Built-In Output Classes</span></p>
  197. <ul>
  198. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QREps.html">QREps</a><ul>
  199. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QREps.html#example">Example</a></li>
  200. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QREps.html#additional-methods">Additional methods</a></li>
  201. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QREps.html#options-that-affect-this-class">Options that affect this class</a></li>
  202. </ul>
  203. </li>
  204. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRFpdf.html">QRFpdf</a><ul>
  205. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRFpdf.html#example">Example</a></li>
  206. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRFpdf.html#additional-methods">Additional methods</a></li>
  207. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRFpdf.html#options-that-affect-this-class">Options that affect this class</a></li>
  208. </ul>
  209. </li>
  210. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRGdImage.html">QRGdImage</a><ul>
  211. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRGdImage.html#example">Example</a></li>
  212. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRGdImage.html#additional-methods">Additional methods</a></li>
  213. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRGdImage.html#options-that-affect-this-class">Options that affect this class</a></li>
  214. </ul>
  215. </li>
  216. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRImagick.html">QRImagick</a><ul>
  217. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRImagick.html#example">Example</a></li>
  218. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRImagick.html#additional-methods">Additional methods</a></li>
  219. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRImagick.html#options-that-affect-this-class">Options that affect this class</a></li>
  220. </ul>
  221. </li>
  222. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRInterventionImage.html">QRInterventionImage</a><ul>
  223. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRInterventionImage.html#example">Example</a></li>
  224. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRInterventionImage.html#additional-methods">Additional methods</a></li>
  225. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRInterventionImage.html#options-that-affect-this-class">Options that affect this class</a></li>
  226. </ul>
  227. </li>
  228. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRMarkupHTML.html">QRMarkupHTML</a><ul>
  229. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRMarkupHTML.html#example">Example</a></li>
  230. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRMarkupHTML.html#additional-methods">Additional methods</a></li>
  231. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRMarkupHTML.html#options-that-affect-this-class">Options that affect this class</a></li>
  232. </ul>
  233. </li>
  234. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRMarkupSVG.html">QRMarkupSVG</a><ul>
  235. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRMarkupSVG.html#example">Example</a></li>
  236. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRMarkupSVG.html#additional-methods">Additional methods</a></li>
  237. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRMarkupSVG.html#options-that-affect-this-class">Options that affect this class</a></li>
  238. </ul>
  239. </li>
  240. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRMarkupXML.html">QRMarkupXML</a><ul>
  241. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRMarkupXML.html#example">Example</a></li>
  242. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRMarkupXML.html#additional-methods">Additional methods</a></li>
  243. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRMarkupXML.html#options-that-affect-this-class">Options that affect this class</a></li>
  244. </ul>
  245. </li>
  246. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRStringJSON.html">QRStringJSON</a><ul>
  247. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRStringJSON.html#example">Example</a></li>
  248. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRStringJSON.html#previous-functionality">Previous functionality</a></li>
  249. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRStringJSON.html#additional-methods">Additional methods</a></li>
  250. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRStringJSON.html#options-that-affect-this-class">Options that affect this class</a></li>
  251. </ul>
  252. </li>
  253. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRStringText.html">QRStringText</a><ul>
  254. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRStringText.html#example">Example</a></li>
  255. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRStringText.html#additional-methods">Additional methods</a></li>
  256. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRStringText.html#options-that-affect-this-class">Options that affect this class</a></li>
  257. </ul>
  258. </li>
  259. </ul>
  260. <p class="caption" role="heading"><span class="caption-text">Appendix</span></p>
  261. <ul>
  262. <li class="toctree-l1"><a class="reference internal" href="../Appendix/Terminology.html">Terminology</a><ul>
  263. <li class="toctree-l2"><a class="reference internal" href="../Appendix/Terminology.html#qr-code">QR Code</a></li>
  264. <li class="toctree-l2"><a class="reference internal" href="../Appendix/Terminology.html#matrix">Matrix</a><ul>
  265. <li class="toctree-l3"><a class="reference internal" href="../Appendix/Terminology.html#module">Module</a></li>
  266. <li class="toctree-l3"><a class="reference internal" href="../Appendix/Terminology.html#version">Version</a></li>
  267. </ul>
  268. </li>
  269. <li class="toctree-l2"><a class="reference internal" href="../Appendix/Terminology.html#function-patterns">Function Patterns</a><ul>
  270. <li class="toctree-l3"><a class="reference internal" href="../Appendix/Terminology.html#finder-pattern">Finder Pattern</a></li>
  271. <li class="toctree-l3"><a class="reference internal" href="../Appendix/Terminology.html#alignment-pattern">Alignment Pattern</a></li>
  272. <li class="toctree-l3"><a class="reference internal" href="../Appendix/Terminology.html#timing-pattern">Timing Pattern</a></li>
  273. <li class="toctree-l3"><a class="reference internal" href="../Appendix/Terminology.html#separators">Separators</a></li>
  274. <li class="toctree-l3"><a class="reference internal" href="../Appendix/Terminology.html#quiet-zone">Quiet Zone</a></li>
  275. </ul>
  276. </li>
  277. <li class="toctree-l2"><a class="reference internal" href="../Appendix/Terminology.html#encoding-region">Encoding Region</a><ul>
  278. <li class="toctree-l3"><a class="reference internal" href="../Appendix/Terminology.html#data">Data</a></li>
  279. <li class="toctree-l3"><a class="reference internal" href="../Appendix/Terminology.html#version-information">Version Information</a></li>
  280. <li class="toctree-l3"><a class="reference internal" href="../Appendix/Terminology.html#format-information">Format Information</a></li>
  281. <li class="toctree-l3"><a class="reference internal" href="../Appendix/Terminology.html#darkmodule">Darkmodule</a></li>
  282. </ul>
  283. </li>
  284. <li class="toctree-l2"><a class="reference internal" href="../Appendix/Terminology.html#mode">Mode</a><ul>
  285. <li class="toctree-l3"><a class="reference internal" href="../Appendix/Terminology.html#segment">Segment</a></li>
  286. <li class="toctree-l3"><a class="reference internal" href="../Appendix/Terminology.html#extended-channel-interpretation-eci">Extended Channel Interpretation (ECI)</a></li>
  287. <li class="toctree-l3"><a class="reference internal" href="../Appendix/Terminology.html#mixed-mode">Mixed Mode</a></li>
  288. </ul>
  289. </li>
  290. <li class="toctree-l2"><a class="reference internal" href="../Appendix/Terminology.html#ecc-error-correction-coding">ECC (Error Correction Coding)</a><ul>
  291. <li class="toctree-l3"><a class="reference internal" href="../Appendix/Terminology.html#ecc-level">ECC Level</a></li>
  292. <li class="toctree-l3"><a class="reference internal" href="../Appendix/Terminology.html#maximum-data-capacity">Maximum data capacity</a></li>
  293. </ul>
  294. </li>
  295. <li class="toctree-l2"><a class="reference internal" href="../Appendix/Terminology.html#data-masking">Data masking</a><ul>
  296. <li class="toctree-l3"><a class="reference internal" href="../Appendix/Terminology.html#evaluation">Evaluation</a></li>
  297. <li class="toctree-l3"><a class="reference internal" href="../Appendix/Terminology.html#mask-pattern">Mask pattern</a></li>
  298. </ul>
  299. </li>
  300. <li class="toctree-l2"><a class="reference internal" href="../Appendix/Terminology.html#reflectance">Reflectance</a></li>
  301. </ul>
  302. </li>
  303. <li class="toctree-l1"><a class="reference internal" href="../Appendix/URI-Content.html">Popular content and URI schemes</a><ul>
  304. <li class="toctree-l2"><a class="reference internal" href="../Appendix/URI-Content.html#url-https">URL <code class="docutils literal notranslate"><span class="pre">https</span></code></a></li>
  305. <li class="toctree-l2"><a class="reference internal" href="../Appendix/URI-Content.html#e-mail-mailto">E-Mail <code class="docutils literal notranslate"><span class="pre">mailto</span></code></a></li>
  306. <li class="toctree-l2"><a class="reference internal" href="../Appendix/URI-Content.html#phone-numbers-tel">Phone numbers <code class="docutils literal notranslate"><span class="pre">tel</span></code></a></li>
  307. <li class="toctree-l2"><a class="reference internal" href="../Appendix/URI-Content.html#geo-coordinates-geo">Geo Coordinates <code class="docutils literal notranslate"><span class="pre">geo</span></code></a></li>
  308. <li class="toctree-l2"><a class="reference internal" href="../Appendix/URI-Content.html#mobile-authenticators-otpauth">Mobile Authenticators <code class="docutils literal notranslate"><span class="pre">otpauth</span></code></a></li>
  309. <li class="toctree-l2"><a class="reference internal" href="../Appendix/URI-Content.html#wireless-network-configuration">Wireless Network configuration</a></li>
  310. <li class="toctree-l2"><a class="reference internal" href="../Appendix/URI-Content.html#contact-information-vcard">Contact information: vCard</a></li>
  311. <li class="toctree-l2"><a class="reference internal" href="../Appendix/URI-Content.html#calendar-events-vcalendar-and-icalendar">Calendar Events: vCalendar and iCalendar</a></li>
  312. <li class="toctree-l2"><a class="reference internal" href="../Appendix/URI-Content.html#credit-transfer">Credit Transfer</a><ul>
  313. <li class="toctree-l3"><a class="reference internal" href="../Appendix/URI-Content.html#sepa-european-payments-council">SEPA (European Payments Council)</a></li>
  314. <li class="toctree-l3"><a class="reference internal" href="../Appendix/URI-Content.html#pix-banco-central-do-brasil">Pix (Banco Central do Brasil)</a></li>
  315. </ul>
  316. </li>
  317. <li class="toctree-l2"><a class="reference internal" href="../Appendix/URI-Content.html#see-also">See also</a></li>
  318. </ul>
  319. </li>
  320. <li class="toctree-l1"><a class="reference internal" href="../Appendix/Performance-considerations.html">Performance considerations</a><ul>
  321. <li class="toctree-l2"><a class="reference internal" href="../Appendix/Performance-considerations.html#version">Version</a></li>
  322. <li class="toctree-l2"><a class="reference internal" href="../Appendix/Performance-considerations.html#ecc-level">Ecc level</a></li>
  323. <li class="toctree-l2"><a class="reference internal" href="../Appendix/Performance-considerations.html#data-mode">Data mode</a></li>
  324. <li class="toctree-l2"><a class="reference internal" href="../Appendix/Performance-considerations.html#mask-pattern">Mask pattern</a></li>
  325. <li class="toctree-l2"><a class="reference internal" href="../Appendix/Performance-considerations.html#output">Output</a></li>
  326. </ul>
  327. </li>
  328. <li class="toctree-l1"><a class="reference internal" href="../Appendix/Contribute.html">How to contribute</a><ul>
  329. <li class="toctree-l2"><a class="reference internal" href="../Appendix/Contribute.html#questions-and-issues">Questions and issues</a></li>
  330. <li class="toctree-l2"><a class="reference internal" href="../Appendix/Contribute.html#bug-reports">Bug reports</a></li>
  331. <li class="toctree-l2"><a class="reference internal" href="../Appendix/Contribute.html#pull-requests-and-bug-fixes">Pull requests and bug fixes</a></li>
  332. <li class="toctree-l2"><a class="reference internal" href="../Appendix/Contribute.html#documentation">Documentation</a></li>
  333. </ul>
  334. </li>
  335. <li class="toctree-l1"><a class="reference internal" href="../Appendix/License.html">License</a></li>
  336. </ul>
  337. </div>
  338. </div>
  339. </nav>
  340. <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
  341. <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
  342. <a href="../index.html">PHP-QRCode</a>
  343. </nav>
  344. <div class="wy-nav-content">
  345. <div class="rst-content">
  346. <div role="navigation" aria-label="Page navigation">
  347. <ul class="wy-breadcrumbs">
  348. <li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
  349. <li class="breadcrumb-item active">Reading QR Codes</li>
  350. <li class="wy-breadcrumbs-aside">
  351. <a href="https://github.com/chillerlan/php-qrcode/blob/main/docs/Usage/Reading-QRCodes.md" class="fa fa-github"> Edit on GitHub</a>
  352. </li>
  353. </ul>
  354. <hr/>
  355. </div>
  356. <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
  357. <div itemprop="articleBody">
  358. <section id="reading-qr-codes">
  359. <h1>Reading QR Codes<a class="headerlink" href="#reading-qr-codes" title="Link to this heading"></a></h1>
  360. <section id="basic-usage">
  361. <h2>Basic usage<a class="headerlink" href="#basic-usage" title="Link to this heading"></a></h2>
  362. <p>The QR Code reader can be called either from a <code class="docutils literal notranslate"><span class="pre">QRCode</span></code> instance or invoked directly via the <code class="docutils literal notranslate"><span class="pre">Decoder</span></code> class with a <code class="docutils literal notranslate"><span class="pre">QROptions</span></code> (<code class="docutils literal notranslate"><span class="pre">QRCodeReaderOptionsTrait</span></code>) instance.</p>
  363. <div class="highlight-php notranslate"><div class="highlight"><pre><span></span><span class="nv">$options</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">QROptions</span>
  364. <span class="nv">$options</span><span class="o">-&gt;</span><span class="na">readerUseImagickIfAvailable</span> <span class="o">=</span> <span class="k">true</span><span class="p">;</span>
  365. <span class="nv">$options</span><span class="o">-&gt;</span><span class="na">readerIncreaseContrast</span> <span class="o">=</span> <span class="k">true</span><span class="p">;</span>
  366. <span class="nv">$options</span><span class="o">-&gt;</span><span class="na">readerGrayscale</span> <span class="o">=</span> <span class="k">true</span><span class="p">;</span>
  367. <span class="nv">$options</span><span class="o">-&gt;</span><span class="na">readerInvertColors</span> <span class="o">=</span> <span class="k">false</span><span class="p">;</span>
  368. </pre></div>
  369. </div>
  370. <p>The option <code class="docutils literal notranslate"><span class="pre">QROptions::$readerUseImagickIfAvailable</span></code> is exclusive to the <code class="docutils literal notranslate"><span class="pre">QRCode</span></code> instance in order to decide which <code class="docutils literal notranslate"><span class="pre">LuminanceSourceInterface</span></code> to use.
  371. The <code class="docutils literal notranslate"><span class="pre">QRCode</span></code> instance has 3 convenience methods related to the reader:</p>
  372. <div class="highlight-php notranslate"><div class="highlight"><pre><span></span><span class="nv">$qrcode</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">QRCode</span><span class="p">(</span><span class="nv">$options</span><span class="p">)</span>
  373. <span class="nv">$result</span> <span class="o">=</span> <span class="nv">$qrcode</span><span class="o">-&gt;</span><span class="na">readFromFile</span><span class="p">(</span><span class="s1">&#39;path/to/qrcode.png&#39;</span><span class="p">);</span>
  374. <span class="nv">$result</span> <span class="o">=</span> <span class="nv">$qrcode</span><span class="o">-&gt;</span><span class="na">readFromBlob</span><span class="p">(</span><span class="nv">$imagedata</span><span class="p">);</span>
  375. <span class="c1">// from a luminance source instance</span>
  376. <span class="nv">$source</span> <span class="o">=</span> <span class="nx">IMagickLuminanceSource</span><span class="o">::</span><span class="na">fromBlob</span><span class="p">(</span><span class="nv">$imagedata</span><span class="p">,</span> <span class="nv">$options</span><span class="p">);</span>
  377. <span class="nv">$result</span> <span class="o">=</span> <span class="nv">$qrcode</span><span class="o">-&gt;</span><span class="na">readFromSource</span><span class="p">(</span><span class="nv">$source</span><span class="p">);</span>
  378. </pre></div>
  379. </div>
  380. </section>
  381. <section id="the-luminancesourceinterface">
  382. <h2>The <code class="docutils literal notranslate"><span class="pre">LuminanceSourceInterface</span></code><a class="headerlink" href="#the-luminancesourceinterface" title="Link to this heading"></a></h2>
  383. <p>The method <code class="docutils literal notranslate"><span class="pre">QRCode::readFromSource()</span></code> takes a <code class="docutils literal notranslate"><span class="pre">LuminanceSourceInterface</span></code> instance as parameter and is mainly for internal use, as you can invoke and call the decoder directly with it.
  384. Each <code class="docutils literal notranslate"><span class="pre">LuminanceSourceInterface</span></code> has the static convenience methods <code class="docutils literal notranslate"><span class="pre">fromFile()</span></code> and <code class="docutils literal notranslate"><span class="pre">fromBlob()</span></code> that will invoke the instance with the respective parameters, alternatively the instance(s) can be invoked manually:</p>
  385. <p>from an <code class="docutils literal notranslate"><span class="pre">Imagick</span></code> instance:</p>
  386. <div class="highlight-php notranslate"><div class="highlight"><pre><span></span><span class="nv">$imagick</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Imagick</span><span class="p">;</span>
  387. <span class="nv">$imagick</span><span class="o">-&gt;</span><span class="na">readImageBlob</span><span class="p">(</span><span class="nv">$imagedata</span><span class="p">);</span>
  388. <span class="nv">$source</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">IMagickLuminanceSource</span><span class="p">(</span><span class="nv">$imagick</span><span class="p">,</span> <span class="nv">$options</span><span class="p">);</span>
  389. </pre></div>
  390. </div>
  391. <p>from a <code class="docutils literal notranslate"><span class="pre">GdImage</span></code> instance:</p>
  392. <div class="highlight-php notranslate"><div class="highlight"><pre><span></span><span class="nv">$gdimage</span> <span class="o">=</span> <span class="nb">imagecreatefromstring</span><span class="p">(</span><span class="nv">$imagedata</span><span class="p">);</span>
  393. <span class="nv">$source</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">GDLuminanceSource</span><span class="p">(</span><span class="nv">$gdimage</span><span class="p">,</span> <span class="nv">$options</span><span class="p">);</span>
  394. </pre></div>
  395. </div>
  396. </section>
  397. <section id="the-decoder">
  398. <h2>The <code class="docutils literal notranslate"><span class="pre">Decoder</span></code><a class="headerlink" href="#the-decoder" title="Link to this heading"></a></h2>
  399. <p>The <code class="docutils literal notranslate"><span class="pre">Decoder</span></code> takes a <code class="docutils literal notranslate"><span class="pre">QROptions</span></code> instance as parameter, which currently has no use - it is only handed over for possible future uses.</p>
  400. <div class="highlight-php notranslate"><div class="highlight"><pre><span></span><span class="nv">$result</span> <span class="o">=</span> <span class="p">(</span><span class="k">new</span> <span class="nx">Decoder</span><span class="p">(</span><span class="nv">$options</span><span class="p">))</span><span class="o">-&gt;</span><span class="na">decode</span><span class="p">(</span><span class="nv">$source</span><span class="p">);</span>
  401. </pre></div>
  402. </div>
  403. <p>That is all! The decoder will either return a <code class="docutils literal notranslate"><span class="pre">DecoderResult</span></code> instance or throw an exception.
  404. It is generally a good practice to wrap the reading in a try/catch block:</p>
  405. <div class="highlight-php notranslate"><div class="highlight"><pre><span></span><span class="k">try</span><span class="p">{</span>
  406. <span class="nv">$result</span> <span class="o">=</span> <span class="nv">$qrcode</span><span class="o">-&gt;</span><span class="na">readFromFile</span><span class="p">(</span><span class="s1">&#39;path/to/file.png&#39;</span><span class="p">);</span> <span class="c1">// -&gt; DecoderResult</span>
  407. <span class="c1">// ... do stuff with the result</span>
  408. <span class="p">}</span>
  409. <span class="k">catch</span><span class="p">(</span><span class="nx">QRCodeDecoderException</span><span class="p">){</span>
  410. <span class="c1">// ... adjust input image (position, contrast, invert, sharpen) and repeat the process</span>
  411. <span class="p">}</span>
  412. </pre></div>
  413. </div>
  414. <p>You can now use the result instance:</p>
  415. <div class="highlight-php notranslate"><div class="highlight"><pre><span></span><span class="nv">$content</span> <span class="o">=</span> <span class="nv">$result</span><span class="o">-&gt;</span><span class="na">data</span><span class="p">;</span>
  416. <span class="c1">// ...or simply cast it to string:</span>
  417. <span class="nv">$content</span> <span class="o">=</span> <span class="p">(</span><span class="nx">string</span><span class="p">)</span><span class="nv">$result</span><span class="p">;</span>
  418. </pre></div>
  419. </div>
  420. <p>The result instance also holds <code class="docutils literal notranslate"><span class="pre">Version</span></code>, <code class="docutils literal notranslate"><span class="pre">EccLevel</span></code>, <code class="docutils literal notranslate"><span class="pre">MaskPattern</span></code> and <code class="docutils literal notranslate"><span class="pre">BitBuffer</span></code> instances, as well as an array of <code class="docutils literal notranslate"><span class="pre">FinderPattern</span></code> instances,
  421. it also offers a method that returns a <code class="docutils literal notranslate"><span class="pre">QRMatrix</span></code> instance populated with the detected settings:</p>
  422. <div class="highlight-php notranslate"><div class="highlight"><pre><span></span><span class="nv">$matrix</span> <span class="o">=</span> <span class="nv">$result</span><span class="o">-&gt;</span><span class="na">getQRMatrix</span><span class="p">();</span>
  423. <span class="c1">// ...matrix modification...</span>
  424. <span class="nv">$output</span> <span class="o">=</span> <span class="p">(</span><span class="k">new</span> <span class="nx">QRCode</span><span class="p">(</span><span class="nv">$options</span><span class="p">))</span><span class="o">-&gt;</span><span class="na">renderMatrix</span><span class="p">(</span><span class="nv">$matrix</span><span class="p">);</span>
  425. <span class="c1">// ...dump output</span>
  426. </pre></div>
  427. </div>
  428. </section>
  429. <section id="general-considerations">
  430. <h2>General considerations<a class="headerlink" href="#general-considerations" title="Link to this heading"></a></h2>
  431. <p>The QR Code reader reads the given QR symbol in a single pass, unlike e.g. a reader app on a mobile device with a camera, which repeats the reading process for a sequence of frames from the video input and takes the “best” result.
  432. It means that this reader may fail to properly decode a symbol that reads perfectly fine on a mobile - you’d need to emulate the same process of sequential reading while adjusting the input image to get a similar result.</p>
  433. <p>Further it seems (<a class="reference external" href="https://github.com/chillerlan/php-qrcode/blob/92346420a5a88aeeb8dc16f731ef1f93331635d3/tests/QRCodeReaderTestAbstract.php#L168-L172">per observation</a>) that the reader favors smaller module sizes (1-2 pixel side length) from version 20 onwards.
  434. The test data set seemed to randomly produce errors depending on the given module scale, independent of the luminance source.
  435. However, scaling down to get a smaller module size isn’t the best solution as it may produce additional challenges due to filter artifacts.</p>
  436. </section>
  437. </section>
  438. </div>
  439. </div>
  440. <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
  441. <a href="Configuration-settings.html" class="btn btn-neutral float-left" title="Configuration settings" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
  442. <a href="Logos.html" class="btn btn-neutral float-right" title="Logos and logo space" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
  443. </div>
  444. <hr/>
  445. <div role="contentinfo">
  446. <p>&#169; Copyright 2025, smiley.</p>
  447. </div>
  448. </footer>
  449. </div>
  450. </div>
  451. </section>
  452. </div>
  453. <script>
  454. jQuery(function () {
  455. SphinxRtdTheme.Navigation.enable(true);
  456. });
  457. </script>
  458. </body>
  459. </html>