Performance-considerations.html 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640
  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>Performance considerations &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="How to contribute" href="Contribute.html" />
  19. <link rel="prev" title="Popular content and URI schemes" href="URI-Content.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>
  39. <li class="toctree-l1"><a class="reference internal" href="../Usage/Overview.html">Overview</a><ul>
  40. <li class="toctree-l2"><a class="reference internal" href="../Usage/Overview.html#features">Features</a></li>
  41. <li class="toctree-l2"><a class="reference internal" href="../Usage/Overview.html#requirements">Requirements</a></li>
  42. <li class="toctree-l2"><a class="reference internal" href="../Usage/Overview.html#framework-integration">Framework Integration</a></li>
  43. <li class="toctree-l2"><a class="reference internal" href="../Usage/Overview.html#shameless-advertising">Shameless advertising</a></li>
  44. </ul>
  45. </li>
  46. <li class="toctree-l1"><a class="reference internal" href="../Usage/Installation.html">Installation</a><ul>
  47. <li class="toctree-l2"><a class="reference internal" href="../Usage/Installation.html#installation-with-composer">Installation with Composer</a><ul>
  48. <li class="toctree-l3"><a class="reference internal" href="../Usage/Installation.html#composer-json">composer.json</a><ul>
  49. <li class="toctree-l4"><a class="reference internal" href="../Usage/Installation.html#version-switch">Version switch</a></li>
  50. </ul>
  51. </li>
  52. <li class="toctree-l3"><a class="reference internal" href="../Usage/Installation.html#terminal">Terminal</a></li>
  53. </ul>
  54. </li>
  55. <li class="toctree-l2"><a class="reference internal" href="../Usage/Installation.html#manual-installation">Manual installation</a><ul>
  56. <li class="toctree-l3"><a class="reference internal" href="../Usage/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="../Usage/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="../Usage/Installation.html#imagemagick">ImageMagick</a></li>
  61. </ul>
  62. </li>
  63. <li class="toctree-l1"><a class="reference internal" href="../Usage/Quickstart.html">Quickstart</a><ul>
  64. <li class="toctree-l2"><a class="reference internal" href="../Usage/Quickstart.html#import-the-library">Import the library</a></li>
  65. <li class="toctree-l2"><a class="reference internal" href="../Usage/Quickstart.html#create-your-first-qr-code">Create your first QR Code</a><ul>
  66. <li class="toctree-l3"><a class="reference internal" href="../Usage/Quickstart.html#configuration">Configuration</a></li>
  67. </ul>
  68. </li>
  69. <li class="toctree-l2"><a class="reference internal" href="../Usage/Quickstart.html#reading-qr-codes">Reading QR Codes</a></li>
  70. <li class="toctree-l2"><a class="reference internal" href="../Usage/Quickstart.html#notes">Notes</a></li>
  71. </ul>
  72. </li>
  73. <li class="toctree-l1"><a class="reference internal" href="../Usage/Advanced-usage.html">Advanced usage</a><ul>
  74. <li class="toctree-l2"><a class="reference internal" href="../Usage/Advanced-usage.html#configuration-via-qroptions">Configuration via <code class="docutils literal notranslate"><span class="pre">QROptions</span></code></a><ul>
  75. <li class="toctree-l3"><a class="reference internal" href="../Usage/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>
  76. <li class="toctree-l3"><a class="reference internal" href="../Usage/Advanced-usage.html#load-and-save-options-from-to-json">Load and save options from/to JSON</a></li>
  77. <li class="toctree-l3"><a class="reference internal" href="../Usage/Advanced-usage.html#extending-the-qroptions-class">Extending the <code class="docutils literal notranslate"><span class="pre">QROptions</span></code> class</a></li>
  78. </ul>
  79. </li>
  80. <li class="toctree-l2"><a class="reference internal" href="../Usage/Advanced-usage.html#qrcode-methods"><code class="docutils literal notranslate"><span class="pre">QRCode</span></code> methods</a><ul>
  81. <li class="toctree-l3"><a class="reference internal" href="../Usage/Advanced-usage.html#render-a-qrmatrix-instance">Render a <code class="docutils literal notranslate"><span class="pre">QRMatrix</span></code> instance</a></li>
  82. <li class="toctree-l3"><a class="reference internal" href="../Usage/Advanced-usage.html#mixed-mode">Mixed mode</a></li>
  83. <li class="toctree-l3"><a class="reference internal" href="../Usage/Advanced-usage.html#qr-code-reader">QR Code reader</a></li>
  84. </ul>
  85. </li>
  86. <li class="toctree-l2"><a class="reference internal" href="../Usage/Advanced-usage.html#common-output-options">Common output options</a><ul>
  87. <li class="toctree-l3"><a class="reference internal" href="../Usage/Advanced-usage.html#save-to-file">Save to file</a></li>
  88. <li class="toctree-l3"><a class="reference internal" href="../Usage/Advanced-usage.html#base64-uri-output">Base64 URI output</a></li>
  89. <li class="toctree-l3"><a class="reference internal" href="../Usage/Advanced-usage.html#return-the-image-resource">Return the image resource</a></li>
  90. <li class="toctree-l3"><a class="reference internal" href="../Usage/Advanced-usage.html#add-a-logo-space">Add a logo space</a></li>
  91. </ul>
  92. </li>
  93. </ul>
  94. </li>
  95. <li class="toctree-l1"><a class="reference internal" href="../Usage/Configuration-settings.html">Configuration settings</a><ul>
  96. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#version">version</a></li>
  97. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#versionmin">versionMin</a></li>
  98. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#versionmax">versionMax</a></li>
  99. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#ecclevel">eccLevel</a></li>
  100. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#maskpattern">maskPattern</a></li>
  101. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#addquietzone">addQuietzone</a></li>
  102. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#quietzonesize">quietzoneSize</a></li>
  103. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#outputinterface">outputInterface</a></li>
  104. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#returnresource">returnResource</a></li>
  105. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#cachefile">cachefile</a></li>
  106. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#outputbase64">outputBase64</a></li>
  107. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#eol">eol</a></li>
  108. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#bgcolor">bgColor</a></li>
  109. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#invertmatrix">invertMatrix</a></li>
  110. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#drawlightmodules">drawLightModules</a></li>
  111. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#drawcircularmodules">drawCircularModules</a></li>
  112. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#circleradius">circleRadius</a></li>
  113. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#keepassquare">keepAsSquare</a></li>
  114. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#connectpaths">connectPaths</a></li>
  115. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#excludefromconnect">excludeFromConnect</a></li>
  116. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#modulevalues">moduleValues</a></li>
  117. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#addlogospace">addLogoSpace</a></li>
  118. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#logospacewidth">logoSpaceWidth</a></li>
  119. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#logospaceheight">logoSpaceHeight</a></li>
  120. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#logospacestartx">logoSpaceStartX</a></li>
  121. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#logospacestarty">logoSpaceStartY</a></li>
  122. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#scale">scale</a></li>
  123. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#imagetransparent">imageTransparent</a></li>
  124. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#transparencycolor">transparencyColor</a></li>
  125. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#quality">quality</a></li>
  126. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#gdimageuseupscale">gdImageUseUpscale</a></li>
  127. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#imagickformat">imagickFormat</a></li>
  128. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#cssclass">cssClass</a></li>
  129. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#svgaddxmlheader">svgAddXmlHeader</a></li>
  130. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#svgdefs">svgDefs</a></li>
  131. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#svgpreserveaspectratio">svgPreserveAspectRatio</a></li>
  132. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#svgusefillattributes">svgUseFillAttributes</a></li>
  133. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#textlinestart">textLineStart</a></li>
  134. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#jsonflags">jsonFlags</a></li>
  135. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#fpdfmeasureunit">fpdfMeasureUnit</a></li>
  136. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#xmlstylesheet">xmlStylesheet</a></li>
  137. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#readeruseimagickifavailable">readerUseImagickIfAvailable</a></li>
  138. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#readergrayscale">readerGrayscale</a></li>
  139. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#readerinvertcolors">readerInvertColors</a></li>
  140. <li class="toctree-l2"><a class="reference internal" href="../Usage/Configuration-settings.html#readerincreasecontrast">readerIncreaseContrast</a></li>
  141. </ul>
  142. </li>
  143. </ul>
  144. <p class="caption" role="heading"><span class="caption-text">Customizing output</span></p>
  145. <ul>
  146. <li class="toctree-l1"><a class="reference internal" href="../Customizing/Module-Values.html">Module values</a><ul>
  147. <li class="toctree-l2"><a class="reference internal" href="../Customizing/Module-Values.html#basics">Basics</a></li>
  148. <li class="toctree-l2"><a class="reference internal" href="../Customizing/Module-Values.html#assigning-values">Assigning values</a></li>
  149. <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>
  150. <li class="toctree-l3"><a class="reference internal" href="../Customizing/Module-Values.html#setting-module-values">Setting module values</a></li>
  151. <li class="toctree-l3"><a class="reference internal" href="../Customizing/Module-Values.html#using-the-module-values">Using the module values</a></li>
  152. </ul>
  153. </li>
  154. </ul>
  155. </li>
  156. <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>
  157. <li class="toctree-l2"><a class="reference internal" href="../Customizing/QROutputAbstract.html#properties">Properties</a><ul>
  158. <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>
  159. <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>
  160. <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>
  161. <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>
  162. </ul>
  163. </li>
  164. <li class="toctree-l2"><a class="reference internal" href="../Customizing/QROutputAbstract.html#methods">Methods</a><ul>
  165. <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>
  166. <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>
  167. <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>
  168. <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>
  169. <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>
  170. <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>
  171. <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>
  172. <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>
  173. <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>
  174. </ul>
  175. </li>
  176. </ul>
  177. </li>
  178. <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>
  179. <li class="toctree-l2"><a class="reference internal" href="../Customizing/Custom-output-interface.html#class-skeleton">Class skeleton</a></li>
  180. <li class="toctree-l2"><a class="reference internal" href="../Customizing/Custom-output-interface.html#module-values">Module values</a></li>
  181. <li class="toctree-l2"><a class="reference internal" href="../Customizing/Custom-output-interface.html#transform-the-output">Transform the output</a></li>
  182. <li class="toctree-l2"><a class="reference internal" href="../Customizing/Custom-output-interface.html#run-the-custom-output">Run the custom output</a></li>
  183. <li class="toctree-l2"><a class="reference internal" href="../Customizing/Custom-output-interface.html#summary">Summary</a></li>
  184. </ul>
  185. </li>
  186. </ul>
  187. <p class="caption" role="heading"><span class="caption-text">Built-In Output Classes</span></p>
  188. <ul>
  189. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QREps.html">QREps</a><ul>
  190. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QREps.html#example">Example</a></li>
  191. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QREps.html#additional-methods">Additional methods</a></li>
  192. <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>
  193. </ul>
  194. </li>
  195. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRFpdf.html">QRFpdf</a><ul>
  196. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRFpdf.html#example">Example</a></li>
  197. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRFpdf.html#additional-methods">Additional methods</a></li>
  198. <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>
  199. </ul>
  200. </li>
  201. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRGdImage.html">QRGdImage</a><ul>
  202. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRGdImage.html#example">Example</a></li>
  203. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRGdImage.html#additional-methods">Additional methods</a></li>
  204. <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>
  205. </ul>
  206. </li>
  207. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRImagick.html">QRImagick</a><ul>
  208. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRImagick.html#example">Example</a></li>
  209. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRImagick.html#additional-methods">Additional methods</a></li>
  210. <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>
  211. </ul>
  212. </li>
  213. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRInterventionImage.html">QRInterventionImage</a><ul>
  214. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRInterventionImage.html#example">Example</a></li>
  215. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRInterventionImage.html#additional-methods">Additional methods</a></li>
  216. <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>
  217. </ul>
  218. </li>
  219. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRMarkupHTML.html">QRMarkupHTML</a><ul>
  220. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRMarkupHTML.html#example">Example</a></li>
  221. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRMarkupHTML.html#additional-methods">Additional methods</a></li>
  222. <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>
  223. </ul>
  224. </li>
  225. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRMarkupSVG.html">QRMarkupSVG</a><ul>
  226. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRMarkupSVG.html#example">Example</a></li>
  227. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRMarkupSVG.html#additional-methods">Additional methods</a></li>
  228. <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>
  229. </ul>
  230. </li>
  231. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRMarkupXML.html">QRMarkupXML</a><ul>
  232. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRMarkupXML.html#example">Example</a></li>
  233. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRMarkupXML.html#additional-methods">Additional methods</a></li>
  234. <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>
  235. </ul>
  236. </li>
  237. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRStringJSON.html">QRStringJSON</a><ul>
  238. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRStringJSON.html#example">Example</a></li>
  239. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRStringJSON.html#previous-functionality">Previous functionality</a></li>
  240. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRStringJSON.html#additional-methods">Additional methods</a></li>
  241. <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>
  242. </ul>
  243. </li>
  244. <li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRStringText.html">QRStringText</a><ul>
  245. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRStringText.html#example">Example</a></li>
  246. <li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRStringText.html#additional-methods">Additional methods</a></li>
  247. <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>
  248. </ul>
  249. </li>
  250. </ul>
  251. <p class="caption" role="heading"><span class="caption-text">Appendix</span></p>
  252. <ul class="current">
  253. <li class="toctree-l1"><a class="reference internal" href="Terminology.html">Terminology</a><ul>
  254. <li class="toctree-l2"><a class="reference internal" href="Terminology.html#qr-code">QR Code</a></li>
  255. <li class="toctree-l2"><a class="reference internal" href="Terminology.html#matrix">Matrix</a><ul>
  256. <li class="toctree-l3"><a class="reference internal" href="Terminology.html#module">Module</a></li>
  257. <li class="toctree-l3"><a class="reference internal" href="Terminology.html#version">Version</a></li>
  258. </ul>
  259. </li>
  260. <li class="toctree-l2"><a class="reference internal" href="Terminology.html#function-patterns">Function Patterns</a><ul>
  261. <li class="toctree-l3"><a class="reference internal" href="Terminology.html#finder-pattern">Finder Pattern</a></li>
  262. <li class="toctree-l3"><a class="reference internal" href="Terminology.html#alignment-pattern">Alignment Pattern</a></li>
  263. <li class="toctree-l3"><a class="reference internal" href="Terminology.html#timing-pattern">Timing Pattern</a></li>
  264. <li class="toctree-l3"><a class="reference internal" href="Terminology.html#separators">Separators</a></li>
  265. <li class="toctree-l3"><a class="reference internal" href="Terminology.html#quiet-zone">Quiet Zone</a></li>
  266. </ul>
  267. </li>
  268. <li class="toctree-l2"><a class="reference internal" href="Terminology.html#encoding-region">Encoding Region</a><ul>
  269. <li class="toctree-l3"><a class="reference internal" href="Terminology.html#data">Data</a></li>
  270. <li class="toctree-l3"><a class="reference internal" href="Terminology.html#version-information">Version Information</a></li>
  271. <li class="toctree-l3"><a class="reference internal" href="Terminology.html#format-information">Format Information</a></li>
  272. <li class="toctree-l3"><a class="reference internal" href="Terminology.html#darkmodule">Darkmodule</a></li>
  273. </ul>
  274. </li>
  275. <li class="toctree-l2"><a class="reference internal" href="Terminology.html#mode">Mode</a><ul>
  276. <li class="toctree-l3"><a class="reference internal" href="Terminology.html#segment">Segment</a></li>
  277. <li class="toctree-l3"><a class="reference internal" href="Terminology.html#extended-channel-interpretation-eci">Extended Channel Interpretation (ECI)</a></li>
  278. <li class="toctree-l3"><a class="reference internal" href="Terminology.html#mixed-mode">Mixed Mode</a></li>
  279. </ul>
  280. </li>
  281. <li class="toctree-l2"><a class="reference internal" href="Terminology.html#ecc-error-correction-coding">ECC (Error Correction Coding)</a><ul>
  282. <li class="toctree-l3"><a class="reference internal" href="Terminology.html#ecc-level">ECC Level</a></li>
  283. <li class="toctree-l3"><a class="reference internal" href="Terminology.html#maximum-data-capacity">Maximum data capacity</a></li>
  284. </ul>
  285. </li>
  286. <li class="toctree-l2"><a class="reference internal" href="Terminology.html#data-masking">Data masking</a><ul>
  287. <li class="toctree-l3"><a class="reference internal" href="Terminology.html#evaluation">Evaluation</a></li>
  288. <li class="toctree-l3"><a class="reference internal" href="Terminology.html#mask-pattern">Mask pattern</a></li>
  289. </ul>
  290. </li>
  291. <li class="toctree-l2"><a class="reference internal" href="Terminology.html#reflectance">Reflectance</a></li>
  292. </ul>
  293. </li>
  294. <li class="toctree-l1"><a class="reference internal" href="URI-Content.html">Popular content and URI schemes</a><ul>
  295. <li class="toctree-l2"><a class="reference internal" href="URI-Content.html#url-https">URL <code class="docutils literal notranslate"><span class="pre">https</span></code></a></li>
  296. <li class="toctree-l2"><a class="reference internal" href="URI-Content.html#e-mail-mailto">E-Mail <code class="docutils literal notranslate"><span class="pre">mailto</span></code></a></li>
  297. <li class="toctree-l2"><a class="reference internal" href="URI-Content.html#phone-numbers-tel">Phone numbers <code class="docutils literal notranslate"><span class="pre">tel</span></code></a></li>
  298. <li class="toctree-l2"><a class="reference internal" href="URI-Content.html#geo-coordinates-geo">Geo Coordinates <code class="docutils literal notranslate"><span class="pre">geo</span></code></a></li>
  299. <li class="toctree-l2"><a class="reference internal" href="URI-Content.html#mobile-authenticators-otpauth">Mobile Authenticators <code class="docutils literal notranslate"><span class="pre">otpauth</span></code></a></li>
  300. <li class="toctree-l2"><a class="reference internal" href="URI-Content.html#wireless-network-configuration">Wireless Network configuration</a></li>
  301. <li class="toctree-l2"><a class="reference internal" href="URI-Content.html#contact-information-vcard">Contact information: vCard</a></li>
  302. <li class="toctree-l2"><a class="reference internal" href="URI-Content.html#calendar-events-vcalendar-and-icalendar">Calendar Events: vCalendar and iCalendar</a></li>
  303. <li class="toctree-l2"><a class="reference internal" href="URI-Content.html#credit-transfer">Credit Transfer</a><ul>
  304. <li class="toctree-l3"><a class="reference internal" href="URI-Content.html#sepa-european-payments-council">SEPA (European Payments Council)</a></li>
  305. <li class="toctree-l3"><a class="reference internal" href="URI-Content.html#pix-banco-central-do-brasil">Pix (Banco Central do Brasil)</a></li>
  306. </ul>
  307. </li>
  308. <li class="toctree-l2"><a class="reference internal" href="URI-Content.html#see-also">See also</a></li>
  309. </ul>
  310. </li>
  311. <li class="toctree-l1 current"><a class="current reference internal" href="#">Performance considerations</a><ul>
  312. <li class="toctree-l2"><a class="reference internal" href="#version">Version</a></li>
  313. <li class="toctree-l2"><a class="reference internal" href="#ecc-level">Ecc level</a></li>
  314. <li class="toctree-l2"><a class="reference internal" href="#data-mode">Data mode</a></li>
  315. <li class="toctree-l2"><a class="reference internal" href="#mask-pattern">Mask pattern</a></li>
  316. <li class="toctree-l2"><a class="reference internal" href="#output">Output</a></li>
  317. </ul>
  318. </li>
  319. <li class="toctree-l1"><a class="reference internal" href="Contribute.html">How to contribute</a><ul>
  320. <li class="toctree-l2"><a class="reference internal" href="Contribute.html#questions-and-issues">Questions and issues</a></li>
  321. <li class="toctree-l2"><a class="reference internal" href="Contribute.html#bug-reports">Bug reports</a></li>
  322. <li class="toctree-l2"><a class="reference internal" href="Contribute.html#pull-requests-and-bug-fixes">Pull requests and bug fixes</a></li>
  323. <li class="toctree-l2"><a class="reference internal" href="Contribute.html#documentation">Documentation</a></li>
  324. </ul>
  325. </li>
  326. <li class="toctree-l1"><a class="reference internal" href="License.html">License</a></li>
  327. </ul>
  328. </div>
  329. </div>
  330. </nav>
  331. <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
  332. <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
  333. <a href="../index.html">PHP-QRCode</a>
  334. </nav>
  335. <div class="wy-nav-content">
  336. <div class="rst-content">
  337. <div role="navigation" aria-label="Page navigation">
  338. <ul class="wy-breadcrumbs">
  339. <li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
  340. <li class="breadcrumb-item active">Performance considerations</li>
  341. <li class="wy-breadcrumbs-aside">
  342. <a href="https://github.com/chillerlan/php-qrcode/blob/main/docs/Appendix/Performance-considerations.md" class="fa fa-github"> Edit on GitHub</a>
  343. </li>
  344. </ul>
  345. <hr/>
  346. </div>
  347. <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
  348. <div itemprop="articleBody">
  349. <section id="performance-considerations">
  350. <h1>Performance considerations<a class="headerlink" href="#performance-considerations" title="Link to this heading"></a></h1>
  351. <p>Generating a QR Code is not a trivial task - it is a combination of countless complex mathematical operations on top of rendering the output.</p>
  352. <p>This library seeks not to be the fastest QR Code generator, but instead to provide flexibility and user friendlyness,
  353. which in turn comes with a slight performance cost.</p>
  354. <section id="version">
  355. <h2>Version<a class="headerlink" href="#version" title="Link to this heading"></a></h2>
  356. <p>The <a class="reference internal" href="Terminology.html#version"><span class="std std-ref">version of the QR symbol</span></a> is one of the major performance factors as it
  357. determines the size of the symbol and therefore the amount of data that can be stored. Iterating over the internal
  358. representation of the matrix takes more time with increasing size and the internals iterate over the matrix a LOT.</p>
  359. <p>Because of that, you want to select the smallest possible version for the given data of course, which the encoder does by default.
  360. However, sometimes the possibly varying size of the symbol may not be desired and you want to choose a fixed size, in which case
  361. you should determine the maximum size of the input data and choose a version that fits.</p>
  362. </section>
  363. <section id="ecc-level">
  364. <h2>Ecc level<a class="headerlink" href="#ecc-level" title="Link to this heading"></a></h2>
  365. <p>Another factor is the <a class="reference internal" href="Terminology.html#ecc-error-correction-coding"><span class="std std-ref">ECC level</span></a> that determines the error correction capacity. The default setting is the lowest capacity (L, 7%)
  366. which allows the highest amount of data to be stored and which is good enough for e.g. on-screen display or poster prints.
  367. ECC level H on the other hand allows for up to 30% error correction capacity, which is great for “high risk” applications such as prints on mail.
  368. With increasing error correction capacity, the maximum amount of data a symbol can hold decreases, and a higher version number may be necessary.</p>
  369. </section>
  370. <section id="data-mode">
  371. <h2>Data mode<a class="headerlink" href="#data-mode" title="Link to this heading"></a></h2>
  372. <p>By default, the encoder auto-detects the best <a class="reference internal" href="Terminology.html#mode"><span class="std std-ref">mode for data encoding</span></a> (numeric, alphanumeric, kanji, hanzi or 8-bit binary)
  373. and depending on the length of the given data, the detection costs an increasing amount of time. To circumvent this,
  374. you can call one of the “add segment” methods on the <code class="docutils literal notranslate"><span class="pre">QRCode</span></code> instance, for example: <code class="docutils literal notranslate"><span class="pre">$qrcode-&gt;addByteSegment($data)</span></code>.</p>
  375. <p>Generally, using 8-bit binary mode (or just “byte mode”) is the fast and fail-safe mode for any kind of data, and with
  376. <a class="reference external" href="https://en.wikipedia.org/wiki/Extended_Channel_Interpretation">ECI</a> it even offers support for character sets other than UTF-8.
  377. So, unless you want to fit a large amount of japanese or chinese characters into a QR symbol of a certain version,
  378. encoding those characters as 3 or 4 byte UTF-8 may still be faster in 8-bit byte than in the “compressed” 13-bit double byte modes.</p>
  379. </section>
  380. <section id="mask-pattern">
  381. <h2>Mask pattern<a class="headerlink" href="#mask-pattern" title="Link to this heading"></a></h2>
  382. <p><a class="reference internal" href="Terminology.html#data-masking"><span class="std std-ref">Evaluating the QR symbol</span></a> in order to pick the right <a class="reference internal" href="Terminology.html#mask-pattern"><span class="std std-ref">mask pattern</span></a>
  383. is a complex and costly operation that is necessary to ensure the symbol is readable. Although <a class="reference internal" href="../Usage/Configuration-settings.html#maskpattern"><span class="std std-ref">there is an option</span></a>
  384. to override the evaluation and manually set a mask pattern, this is not recommended unless you know exactly what you’re doing
  385. as it can render a QR symbol unreadable.</p>
  386. <p>The table below shows the performance impact (in miliseconds) of the mask pattern evaluation for each version, the times may vary between systems.</p>
  387. <table class="docutils align-default">
  388. <thead>
  389. <tr class="row-odd"><th class="head"><p>version</p></th>
  390. <th class="head text-right"><p>1</p></th>
  391. <th class="head text-right"><p>2</p></th>
  392. <th class="head text-right"><p>3</p></th>
  393. <th class="head text-right"><p>4</p></th>
  394. <th class="head text-right"><p>5</p></th>
  395. <th class="head text-right"><p>6</p></th>
  396. <th class="head text-right"><p>7</p></th>
  397. <th class="head text-right"><p>8</p></th>
  398. <th class="head text-right"><p>9</p></th>
  399. <th class="head text-right"><p>10</p></th>
  400. </tr>
  401. </thead>
  402. <tbody>
  403. <tr class="row-even"><td><p><strong>1-10</strong></p></td>
  404. <td class="text-right"><p>4.414</p></td>
  405. <td class="text-right"><p>5.697</p></td>
  406. <td class="text-right"><p>7.986</p></td>
  407. <td class="text-right"><p>9.221</p></td>
  408. <td class="text-right"><p>10.877</p></td>
  409. <td class="text-right"><p>11.293</p></td>
  410. <td class="text-right"><p>13.901</p></td>
  411. <td class="text-right"><p>15.563</p></td>
  412. <td class="text-right"><p>18.142</p></td>
  413. <td class="text-right"><p>20.501</p></td>
  414. </tr>
  415. <tr class="row-odd"><td><p><strong>11-20</strong></p></td>
  416. <td class="text-right"><p>22.662</p></td>
  417. <td class="text-right"><p>27.779</p></td>
  418. <td class="text-right"><p>29.622</p></td>
  419. <td class="text-right"><p>33.017</p></td>
  420. <td class="text-right"><p>36.358</p></td>
  421. <td class="text-right"><p>39.712</p></td>
  422. <td class="text-right"><p>43.685</p></td>
  423. <td class="text-right"><p>47.121</p></td>
  424. <td class="text-right"><p>51.389</p></td>
  425. <td class="text-right"><p>57.865</p></td>
  426. </tr>
  427. <tr class="row-even"><td><p><strong>21-30</strong></p></td>
  428. <td class="text-right"><p>59.753</p></td>
  429. <td class="text-right"><p>68.502</p></td>
  430. <td class="text-right"><p>68.523</p></td>
  431. <td class="text-right"><p>72.866</p></td>
  432. <td class="text-right"><p>78.245</p></td>
  433. <td class="text-right"><p>83.593</p></td>
  434. <td class="text-right"><p>88.327</p></td>
  435. <td class="text-right"><p>94.921</p></td>
  436. <td class="text-right"><p>103.394</p></td>
  437. <td class="text-right"><p>106.358</p></td>
  438. </tr>
  439. <tr class="row-odd"><td><p><strong>31-40</strong></p></td>
  440. <td class="text-right"><p>113.311</p></td>
  441. <td class="text-right"><p>120.484</p></td>
  442. <td class="text-right"><p>126.215</p></td>
  443. <td class="text-right"><p>132.931</p></td>
  444. <td class="text-right"><p>139.783</p></td>
  445. <td class="text-right"><p>145.617</p></td>
  446. <td class="text-right"><p>170.576</p></td>
  447. <td class="text-right"><p>165.996</p></td>
  448. <td class="text-right"><p>167.365</p></td>
  449. <td class="text-right"><p>175.821</p></td>
  450. </tr>
  451. </tbody>
  452. </table>
  453. </section>
  454. <section id="output">
  455. <h2>Output<a class="headerlink" href="#output" title="Link to this heading"></a></h2>
  456. <p>Output rendering depends heavily on the size of the QR matrix, the desired type and the underlying libraries and/or PHP extensions.
  457. Especially the rendering of raster images through GD or ImagMagick can be very slow, depending on <a class="reference internal" href="../Usage/Configuration-settings.html#scale"><span class="std std-ref">the scale setting</span></a>,
  458. filters and image type.</p>
  459. <p>Below a comparison of the performance for the several built-in output classes (times in miliseconds, scale = 5):</p>
  460. <table class="docutils align-default">
  461. <thead>
  462. <tr class="row-odd"><th class="head"><p></p></th>
  463. <th class="head text-right"><p>v5</p></th>
  464. <th class="head text-right"><p>v10</p></th>
  465. <th class="head text-right"><p>v15</p></th>
  466. <th class="head text-right"><p>v20</p></th>
  467. <th class="head text-right"><p>v25</p></th>
  468. <th class="head text-right"><p>v30</p></th>
  469. <th class="head text-right"><p>v35</p></th>
  470. <th class="head text-right"><p>v40</p></th>
  471. </tr>
  472. </thead>
  473. <tbody>
  474. <tr class="row-even"><td><p><strong>QRMarkupSVG</strong></p></td>
  475. <td class="text-right"><p>3.732</p></td>
  476. <td class="text-right"><p>8.645</p></td>
  477. <td class="text-right"><p>13.846</p></td>
  478. <td class="text-right"><p>21.127</p></td>
  479. <td class="text-right"><p>32.842</p></td>
  480. <td class="text-right"><p>43.753</p></td>
  481. <td class="text-right"><p>56.584</p></td>
  482. <td class="text-right"><p>73.885</p></td>
  483. </tr>
  484. <tr class="row-odd"><td><p><strong>QRMarkupHTML</strong></p></td>
  485. <td class="text-right"><p>0.522</p></td>
  486. <td class="text-right"><p>1.308</p></td>
  487. <td class="text-right"><p>2.062</p></td>
  488. <td class="text-right"><p>2.761</p></td>
  489. <td class="text-right"><p>3.907</p></td>
  490. <td class="text-right"><p>5.201</p></td>
  491. <td class="text-right"><p>7.931</p></td>
  492. <td class="text-right"><p>9.572</p></td>
  493. </tr>
  494. <tr class="row-even"><td><p><strong>QRGdImageBMP</strong></p></td>
  495. <td class="text-right"><p>5.998</p></td>
  496. <td class="text-right"><p>12.541</p></td>
  497. <td class="text-right"><p>20.728</p></td>
  498. <td class="text-right"><p>32.336</p></td>
  499. <td class="text-right"><p>46.345</p></td>
  500. <td class="text-right"><p>62.842</p></td>
  501. <td class="text-right"><p>81.555</p></td>
  502. <td class="text-right"><p>106.482</p></td>
  503. </tr>
  504. <tr class="row-odd"><td><p><strong>QRGdImageGIF</strong></p></td>
  505. <td class="text-right"><p>3.427</p></td>
  506. <td class="text-right"><p>6.817</p></td>
  507. <td class="text-right"><p>12.226</p></td>
  508. <td class="text-right"><p>17.925</p></td>
  509. <td class="text-right"><p>25.453</p></td>
  510. <td class="text-right"><p>35.136</p></td>
  511. <td class="text-right"><p>44.706</p></td>
  512. <td class="text-right"><p>57.477</p></td>
  513. </tr>
  514. <tr class="row-even"><td><p><strong>QRGdImageJPEG</strong></p></td>
  515. <td class="text-right"><p>2.284</p></td>
  516. <td class="text-right"><p>4.882</p></td>
  517. <td class="text-right"><p>8.161</p></td>
  518. <td class="text-right"><p>12.097</p></td>
  519. <td class="text-right"><p>17.333</p></td>
  520. <td class="text-right"><p>23.862</p></td>
  521. <td class="text-right"><p>30.327</p></td>
  522. <td class="text-right"><p>40.226</p></td>
  523. </tr>
  524. <tr class="row-odd"><td><p><strong>QRGdImagePNG</strong></p></td>
  525. <td class="text-right"><p>4.523</p></td>
  526. <td class="text-right"><p>9.377</p></td>
  527. <td class="text-right"><p>16.581</p></td>
  528. <td class="text-right"><p>26.207</p></td>
  529. <td class="text-right"><p>36.516</p></td>
  530. <td class="text-right"><p>49.066</p></td>
  531. <td class="text-right"><p>63.765</p></td>
  532. <td class="text-right"><p>82.074</p></td>
  533. </tr>
  534. <tr class="row-even"><td><p><strong>QRGdImageWEBP</strong></p></td>
  535. <td class="text-right"><p>8.211</p></td>
  536. <td class="text-right"><p>17.367</p></td>
  537. <td class="text-right"><p>30.079</p></td>
  538. <td class="text-right"><p>47.095</p></td>
  539. <td class="text-right"><p>69.668</p></td>
  540. <td class="text-right"><p>91.378</p></td>
  541. <td class="text-right"><p>119.869</p></td>
  542. <td class="text-right"><p>150.288</p></td>
  543. </tr>
  544. <tr class="row-odd"><td><p><strong>QRStringJSON</strong></p></td>
  545. <td class="text-right"><p>0.043</p></td>
  546. <td class="text-right"><p>0.066</p></td>
  547. <td class="text-right"><p>0.107</p></td>
  548. <td class="text-right"><p>0.158</p></td>
  549. <td class="text-right"><p>0.215</p></td>
  550. <td class="text-right"><p>0.301</p></td>
  551. <td class="text-right"><p>0.369</p></td>
  552. <td class="text-right"><p>0.492</p></td>
  553. </tr>
  554. <tr class="row-even"><td><p><strong>QRStringText</strong></p></td>
  555. <td class="text-right"><p>0.229</p></td>
  556. <td class="text-right"><p>0.387</p></td>
  557. <td class="text-right"><p>0.628</p></td>
  558. <td class="text-right"><p>0.952</p></td>
  559. <td class="text-right"><p>1.312</p></td>
  560. <td class="text-right"><p>1.759</p></td>
  561. <td class="text-right"><p>2.329</p></td>
  562. <td class="text-right"><p>3.045</p></td>
  563. </tr>
  564. <tr class="row-odd"><td><p><strong>QRImagick</strong></p></td>
  565. <td class="text-right"><p>37.694</p></td>
  566. <td class="text-right"><p>68.808</p></td>
  567. <td class="text-right"><p>114.415</p></td>
  568. <td class="text-right"><p>172.962</p></td>
  569. <td class="text-right"><p>242.338</p></td>
  570. <td class="text-right"><p>325.085</p></td>
  571. <td class="text-right"><p>419.999</p></td>
  572. <td class="text-right"><p>529.897</p></td>
  573. </tr>
  574. <tr class="row-even"><td><p><strong>QRFpdf</strong></p></td>
  575. <td class="text-right"><p>6.578</p></td>
  576. <td class="text-right"><p>12.466</p></td>
  577. <td class="text-right"><p>21.169</p></td>
  578. <td class="text-right"><p>33.021</p></td>
  579. <td class="text-right"><p>45.469</p></td>
  580. <td class="text-right"><p>61.198</p></td>
  581. <td class="text-right"><p>80.092</p></td>
  582. <td class="text-right"><p>100.059</p></td>
  583. </tr>
  584. <tr class="row-odd"><td><p><strong>QREps</strong></p></td>
  585. <td class="text-right"><p>1.269</p></td>
  586. <td class="text-right"><p>2.694</p></td>
  587. <td class="text-right"><p>4.515</p></td>
  588. <td class="text-right"><p>6.933</p></td>
  589. <td class="text-right"><p>11.049</p></td>
  590. <td class="text-right"><p>14.181</p></td>
  591. <td class="text-right"><p>20.799</p></td>
  592. <td class="text-right"><p>25.886</p></td>
  593. </tr>
  594. </tbody>
  595. </table>
  596. </section>
  597. </section>
  598. </div>
  599. </div>
  600. <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
  601. <a href="URI-Content.html" class="btn btn-neutral float-left" title="Popular content and URI schemes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
  602. <a href="Contribute.html" class="btn btn-neutral float-right" title="How to contribute" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
  603. </div>
  604. <hr/>
  605. <div role="contentinfo">
  606. <p>&#169; Copyright 2023, smiley.</p>
  607. </div>
  608. </footer>
  609. </div>
  610. </div>
  611. </section>
  612. </div>
  613. <script>
  614. jQuery(function () {
  615. SphinxRtdTheme.Navigation.enable(true);
  616. });
  617. </script>
  618. </body>
  619. </html>