Ajout de la recherche OpenSearch
Possibilité de générer un code QR depuis la barre de recherche, en ajoutant le générateur comme moteur de recherche.
This commit is contained in:
parent
9ce259cfa0
commit
8a2a605f45
22 changed files with 2632 additions and 2043 deletions
100
index.php
100
index.php
|
@ -3,15 +3,8 @@
|
||||||
https://code.antopie.org/miraty/qr
|
https://code.antopie.org/miraty/qr
|
||||||
-->
|
-->
|
||||||
<?php
|
<?php
|
||||||
supprimerVieuxQR(60 * 60 * 24 * 7); // Indique le temps en secondes après lequel le code qr sera supprimé quand qq chargera la page
|
|
||||||
$theme = "defaut"; // defaut ou parinux
|
|
||||||
|
|
||||||
if ($theme == "defaut") {
|
|
||||||
$couleurPrincipale = "#2D2F34";
|
|
||||||
} else if ($theme == "parinux") {
|
|
||||||
$couleurPrincipale = "#157097";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
require "options.inc.php";
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
@ -34,14 +27,19 @@
|
||||||
<link rel="icon" type="image/png" href="favicons/<?php echo $theme; ?>-512.png" sizes="512x512"/>
|
<link rel="icon" type="image/png" href="favicons/<?php echo $theme; ?>-512.png" sizes="512x512"/>
|
||||||
<meta name="theme-color" content="<?php echo $couleurPrincipale; ?>">
|
<meta name="theme-color" content="<?php echo $couleurPrincipale; ?>">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="search" type="application/opensearchdescription+xml" title="Générer un code QR" href="opensearch.php" />
|
||||||
<style>
|
<style>
|
||||||
<?php require("lessphp/lessc.inc.php");
|
<?php require "lessphp/lessc.inc.php";
|
||||||
$less = new lessc;
|
$less = new lessc;
|
||||||
echo $less->compileFile("themes/" . $theme . ".less"); ?>
|
echo $less->compileFile("themes/" . $theme . ".less"); ?>
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body lang="fr">
|
<body lang="fr">
|
||||||
|
|
||||||
|
<?php if (!isset($_GET["texte"])) { // Si OpenSearch n'a pas été utilisé ?>
|
||||||
|
|
||||||
|
|
||||||
<header>
|
<header>
|
||||||
<a href=""><img id="logo" src="<?php echo $theme; ?>.png" alt="Logo <?php echo $theme; ?>"> <h1>Générateur de codes QR</h1></a>
|
<a href=""><img id="logo" src="<?php echo $theme; ?>.png" alt="Logo <?php echo $theme; ?>"> <h1>Générateur de codes QR</h1></a>
|
||||||
</header>
|
</header>
|
||||||
|
@ -49,6 +47,10 @@
|
||||||
|
|
||||||
<div class="param">
|
<div class="param">
|
||||||
<label for="texte">Texte à encoder</label>
|
<label for="texte">Texte à encoder</label>
|
||||||
|
<span class="conteneurAide">
|
||||||
|
<img src="aide.svg" alt="Aide">
|
||||||
|
<span class="contenuAide">Vous pouvez encoder ce que vous voulez sous forme de texte.</span>
|
||||||
|
</span>
|
||||||
<br>
|
<br>
|
||||||
<textarea rows="8" required="" id="texte" placeholder="Entrez le texte à encoder dans le code QR" name="texte"><?php
|
<textarea rows="8" required="" id="texte" placeholder="Entrez le texte à encoder dans le code QR" name="texte"><?php
|
||||||
|
|
||||||
|
@ -128,32 +130,21 @@
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
function generateRandomString($length) {
|
|
||||||
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
||||||
$charactersLength = strlen($characters);
|
|
||||||
$randomString = '';
|
|
||||||
for ($i = 0; $i < $length; $i++) {
|
|
||||||
$randomString .= $characters[rand(0, $charactersLength - 1)];
|
|
||||||
}
|
|
||||||
return $randomString;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (isset($_POST['texte']) and isset($_POST['taille']) and isset($_POST['redondance']) and isset($_POST['marge'])) {
|
if (isset($_POST['texte']) and isset($_POST['taille']) and isset($_POST['redondance']) and isset($_POST['marge'])) {
|
||||||
include "phpqrcode/qrlib.php";
|
require "phpqrcode/qrlib.php";
|
||||||
|
|
||||||
$cheminImage = "temp/" . generateRandomString(50) . ".png";
|
$cheminImage = "temp/" . generateRandomString(50) . ".png";
|
||||||
|
|
||||||
QRcode::png($_POST['texte'], $cheminImage, $_POST['redondance'], $_POST['taille'], $_POST['marge']); ?>
|
QRcode::png($_POST['texte'], $cheminImage, $_POST['redondance'], $_POST['taille'], $_POST['marge']); ?>
|
||||||
|
|
||||||
<div class="centrer">
|
<div class="centrer">
|
||||||
<a href="<?php echo $cheminImage; ?>" class="bouton" download="<?php echo $_POST['texte']; ?>.png">Télécharger ce code QR</a>
|
<a href="<?php echo $cheminImage; ?>" class="bouton" download="<?php echo htmlspecialchars($_POST['texte']); ?>.png">Télécharger ce code QR</a>
|
||||||
</div>
|
</div>
|
||||||
<br><br>
|
<br><br>
|
||||||
<div class="centrer">
|
<div class="centrer">
|
||||||
<a href="<?php echo $cheminImage; ?>"><img id="codeQR" src="<?php echo $cheminImage; ?>"/></a>
|
<a href="<?php echo $cheminImage; ?>"><img alt='Un code QR contenant "<?php echo htmlspecialchars($_GET['texte']); ?>"' id="codeQR" src="<?php echo $cheminImage; ?>"/></a>
|
||||||
</div>
|
</div>
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
|
@ -163,37 +154,32 @@
|
||||||
<a class="lienCodeSource" href="https://code.antopie.org/miraty/qr">Code source</a>
|
<a class="lienCodeSource" href="https://code.antopie.org/miraty/qr">Code source</a>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
|
|
||||||
|
<?php } else if (isset($_GET["texte"])) { // Si OpenSearch a été utilisé
|
||||||
|
|
||||||
|
if (empty($_GET["texte"])) { // Si rien n'a été recherché ?>
|
||||||
|
|
||||||
|
<span style="font-size: 30px;">Erreur : vous ne pouvez pas générer un code QR vide !
|
||||||
|
|
||||||
|
<?php } else if (!empty($_GET["texte"])) {
|
||||||
|
|
||||||
|
require "phpqrcode/qrlib.php";
|
||||||
|
$cheminImage = "temp/" . generateRandomString(50) . ".png";
|
||||||
|
|
||||||
|
QRcode::png($_GET['texte'], $cheminImage, "H", 4, 2); ?>
|
||||||
|
|
||||||
|
<div class="centrer">
|
||||||
|
<a href="<?php echo $cheminImage; ?>" class="bouton" download="<?php echo htmlspecialchars($_GET['texte']); ?>.png">Télécharger ce code QR</a>
|
||||||
|
</div>
|
||||||
|
<br><br>
|
||||||
|
<div class="centrer">
|
||||||
|
<a href="<?php echo $cheminImage; ?>"><img alt='Un code QR contenant "<?php echo htmlspecialchars($_GET['texte']); ?>"' id="codeQR" src="<?php echo $cheminImage; ?>"/></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<?php } } ?>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<?php
|
|
||||||
|
|
||||||
function supprimerVieuxQR($tempsDeSuppression) {
|
|
||||||
|
|
||||||
$listeCodesQR = new DirectoryIterator("temp");
|
|
||||||
|
|
||||||
foreach($listeCodesQR as $listeCodesQR) {
|
|
||||||
|
|
||||||
if ($listeCodesQR->getFilename() != "." AND $listeCodesQR->getFilename() != "..") {
|
|
||||||
|
|
||||||
if ((time() - filemtime("temp/" . $listeCodesQR->getFilename())) > $tempsDeSuppression) {
|
|
||||||
|
|
||||||
unlink("temp/" . $listeCodesQR->getFilename());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
?>
|
|
||||||
|
|
21
opensearch.php
Executable file
21
opensearch.php
Executable file
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
require "options.inc.php";
|
||||||
|
?>
|
||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
|
||||||
|
<ShortName>Générer un code QR</ShortName>
|
||||||
|
<Description>Générez des codes QR depuis votre barre de recherche ou d'adresse</Description>
|
||||||
|
<Image height="16" width="16" type="image/png"><?php echo $cheminInstall; ?>favicons/<?php echo $theme; ?>-16.png</Image>
|
||||||
|
<Image height="32" width="32" type="image/png"><?php echo $cheminInstall; ?>favicons/<?php echo $theme; ?>-32.png</Image>
|
||||||
|
<Image height="48" width="48" type="image/png"><?php echo $cheminInstall; ?>favicons/<?php echo $theme; ?>-48.png</Image>
|
||||||
|
<Image height="64" width="64" type="image/png"><?php echo $cheminInstall; ?>favicons/<?php echo $theme; ?>-64.png</Image>
|
||||||
|
<Image height="96" width="96" type="image/png"><?php echo $cheminInstall; ?>favicons/<?php echo $theme; ?>-96.png</Image>
|
||||||
|
<Image height="128" width="128" type="image/png"><?php echo $cheminInstall; ?>favicons/<?php echo $theme; ?>-128.png</Image>
|
||||||
|
<Image height="192" width="192" type="image/png"><?php echo $cheminInstall; ?>favicons/<?php echo $theme; ?>-192.png</Image>
|
||||||
|
<Image height="256" width="256" type="image/png"><?php echo $cheminInstall; ?>favicons/<?php echo $theme; ?>-256.png</Image>
|
||||||
|
<Image height="384" width="384" type="image/png"><?php echo $cheminInstall; ?>favicons/<?php echo $theme; ?>-384.png</Image>
|
||||||
|
<Image height="512" width="512" type="image/png"><?php echo $cheminInstall; ?>favicons/<?php echo $theme; ?>-512.png</Image>
|
||||||
|
<Language>fr</Language>
|
||||||
|
<InputEncoding>UTF-8</InputEncoding>
|
||||||
|
<Url type="text/html" template="<?php echo $cheminInstall; ?>?texte={searchTerms}"/>
|
||||||
|
</OpenSearchDescription>
|
37
options.inc.php
Executable file
37
options.inc.php
Executable file
|
@ -0,0 +1,37 @@
|
||||||
|
<?php
|
||||||
|
supprimerVieuxQR(60 * 60 * 24 * 7); // Indique le temps en secondes après lequel le code qr sera supprimé quand qq chargera la page
|
||||||
|
$theme = "defaut"; // defaut ou parinux
|
||||||
|
|
||||||
|
if ($theme == "defaut") {
|
||||||
|
$couleurPrincipale = "#2D2F34";
|
||||||
|
} else if ($theme == "parinux") {
|
||||||
|
$couleurPrincipale = "#157097";
|
||||||
|
}
|
||||||
|
|
||||||
|
$cheminInstall = "http://localhost:8888/qr/";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function generateRandomString($length) {
|
||||||
|
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||||
|
$charactersLength = strlen($characters);
|
||||||
|
$randomString = '';
|
||||||
|
for ($i = 0; $i < $length; $i++) {
|
||||||
|
$randomString .= $characters[rand(0, $charactersLength - 1)];
|
||||||
|
}
|
||||||
|
return $randomString;
|
||||||
|
}
|
||||||
|
|
||||||
|
function supprimerVieuxQR($tempsDeSuppression) {
|
||||||
|
$listeCodesQR = new DirectoryIterator("temp");
|
||||||
|
foreach($listeCodesQR as $listeCodesQR) {
|
||||||
|
if ($listeCodesQR->getFilename() != "." AND $listeCodesQR->getFilename() != "..") {
|
||||||
|
if ((time() - filemtime("temp/" . $listeCodesQR->getFilename())) > $tempsDeSuppression) { // Si le temps actuel (en heure Posix) moins la date de dernière modification de l'image est supérieur à la durée de vie demandée de l'image
|
||||||
|
unlink("temp/" . $listeCodesQR->getFilename()); // Alors supprimer cette image
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
?>
|
2
phpqrcode/.gitignore
vendored
Executable file
2
phpqrcode/.gitignore
vendored
Executable file
|
@ -0,0 +1,2 @@
|
||||||
|
.idea/
|
||||||
|
temp/*.png
|
|
@ -18,7 +18,7 @@ provided comments and project wiki page (links in README file)
|
||||||
|
|
||||||
Notice: probably you should'nt use all of this in same script :)
|
Notice: probably you should'nt use all of this in same script :)
|
||||||
|
|
||||||
<?phpb
|
<?php
|
||||||
|
|
||||||
//include only that one, rest required files will be included from it
|
//include only that one, rest required files will be included from it
|
||||||
include "qrlib.php"
|
include "qrlib.php"
|
||||||
|
|
|
@ -1,6 +1,22 @@
|
||||||
This is PHP implementation of QR Code 2-D barcode generator. It is pure-php
|
This is PHP implementation of QR Code 2-D barcode generator. It is pure-php
|
||||||
LGPL-licensed implementation based on C libqrencode by Kentaro Fukuchi.
|
LGPL-licensed implementation based on C libqrencode by Kentaro Fukuchi.
|
||||||
|
|
||||||
|
== UPDATE ==
|
||||||
|
Added support for eps export
|
||||||
|
Usage : QRcode::eps('arguments');
|
||||||
|
|
||||||
|
Added support for SVG export
|
||||||
|
Usage : QRcode::svg('arguments');
|
||||||
|
|
||||||
|
Added support for color export :
|
||||||
|
example :
|
||||||
|
$back_color = 0xFFFF00;
|
||||||
|
$fore_color = 0xFF00FF;
|
||||||
|
QRcode::png('some othertext 1234', false, 'h', 20, 1, false, $back_color, $fore_color);
|
||||||
|
|
||||||
|
|
||||||
|
Copyright (C) 2012 by Alexandre Assouad
|
||||||
|
|
||||||
== LICENSING ==
|
== LICENSING ==
|
||||||
|
|
||||||
Copyright (C) 2010 by Dominik Dzienia
|
Copyright (C) 2010 by Dominik Dzienia
|
||||||
|
|
|
@ -1,94 +0,0 @@
|
||||||
<?php
|
|
||||||
/*
|
|
||||||
* PHP QR Code encoder
|
|
||||||
*
|
|
||||||
* Exemplatory usage
|
|
||||||
*
|
|
||||||
* PHP QR Code is distributed under LGPL 3
|
|
||||||
* Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 3 of the License, or any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
echo "<h1>PHP QR Code</h1><hr/>";
|
|
||||||
|
|
||||||
//set it to writable location, a place for temp generated PNG files
|
|
||||||
$PNG_TEMP_DIR = dirname(__FILE__).DIRECTORY_SEPARATOR.'temp'.DIRECTORY_SEPARATOR;
|
|
||||||
|
|
||||||
//html PNG location prefix
|
|
||||||
$PNG_WEB_DIR = 'temp/';
|
|
||||||
|
|
||||||
include "qrlib.php";
|
|
||||||
|
|
||||||
//ofcourse we need rights to create temp dir
|
|
||||||
if (!file_exists($PNG_TEMP_DIR))
|
|
||||||
mkdir($PNG_TEMP_DIR);
|
|
||||||
|
|
||||||
|
|
||||||
$filename = $PNG_TEMP_DIR.'test.png';
|
|
||||||
|
|
||||||
//processing form input
|
|
||||||
//remember to sanitize user input in real-life solution !!!
|
|
||||||
$errorCorrectionLevel = 'L';
|
|
||||||
if (isset($_REQUEST['level']) && in_array($_REQUEST['level'], array('L','M','Q','H')))
|
|
||||||
$errorCorrectionLevel = $_REQUEST['level'];
|
|
||||||
|
|
||||||
$matrixPointSize = 4;
|
|
||||||
if (isset($_REQUEST['size']))
|
|
||||||
$matrixPointSize = min(max((int)$_REQUEST['size'], 1), 10);
|
|
||||||
|
|
||||||
|
|
||||||
if (isset($_REQUEST['data'])) {
|
|
||||||
|
|
||||||
//it's very important!
|
|
||||||
if (trim($_REQUEST['data']) == '')
|
|
||||||
die('data cannot be empty! <a href="?">back</a>');
|
|
||||||
|
|
||||||
// user data
|
|
||||||
$filename = $PNG_TEMP_DIR.'test'.md5($_REQUEST['data'].'|'.$errorCorrectionLevel.'|'.$matrixPointSize).'.png';
|
|
||||||
QRcode::png($_REQUEST['data'], $filename, $errorCorrectionLevel, $matrixPointSize, 2);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
//default data
|
|
||||||
echo 'You can provide data in GET parameter: <a href="?data=like_that">like that</a><hr/>';
|
|
||||||
QRcode::png('PHP QR Code :)', $filename, $errorCorrectionLevel, $matrixPointSize, 2);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//display generated file
|
|
||||||
echo '<img src="'.$PNG_WEB_DIR.basename($filename).'" /><hr/>';
|
|
||||||
|
|
||||||
//config form
|
|
||||||
echo '<form action="index.php" method="post">
|
|
||||||
Data: <input name="data" value="'.(isset($_REQUEST['data'])?htmlspecialchars($_REQUEST['data']):'PHP QR Code :)').'" />
|
|
||||||
ECC: <select name="level">
|
|
||||||
<option value="L"'.(($errorCorrectionLevel=='L')?' selected':'').'>L - smallest</option>
|
|
||||||
<option value="M"'.(($errorCorrectionLevel=='M')?' selected':'').'>M</option>
|
|
||||||
<option value="Q"'.(($errorCorrectionLevel=='Q')?' selected':'').'>Q</option>
|
|
||||||
<option value="H"'.(($errorCorrectionLevel=='H')?' selected':'').'>H - best</option>
|
|
||||||
</select>
|
|
||||||
Size: <select name="size">';
|
|
||||||
|
|
||||||
for($i=1;$i<=10;$i++)
|
|
||||||
echo '<option value="'.$i.'"'.(($matrixPointSize==$i)?' selected':'').'>'.$i.'</option>';
|
|
||||||
|
|
||||||
echo '</select>
|
|
||||||
<input type="submit" value="GENERATE"></form><hr/>';
|
|
||||||
|
|
||||||
// benchmark
|
|
||||||
QRtools::timeBenchmark();
|
|
||||||
|
|
||||||
|
|
|
@ -6,14 +6,15 @@
|
||||||
* This file contains MERGED version of PHP QR Code library.
|
* This file contains MERGED version of PHP QR Code library.
|
||||||
* It was auto-generated from full version for your convenience.
|
* It was auto-generated from full version for your convenience.
|
||||||
*
|
*
|
||||||
* This merged version was configured to not requre any external files,
|
* This merged version was configured to not require any external files,
|
||||||
* with disabled cache, error loging and weker but faster mask matching.
|
* with disabled cache, error logging and weaker but faster mask matching.
|
||||||
* If you need tune it up please use non-merged version.
|
* If you need tune it up please use non-merged version.
|
||||||
*
|
*
|
||||||
* For full version, documentation, examples of use please visit:
|
* For full version, documentation, examples of use please visit:
|
||||||
*
|
*
|
||||||
* http://phpqrcode.sourceforge.net/
|
* http://phpqrcode.sourceforge.net/
|
||||||
* https://sourceforge.net/projects/phpqrcode/
|
* https://sourceforge.net/projects/phpqrcode/
|
||||||
|
* https://github.com/t0k4rt/phpqrcode
|
||||||
*
|
*
|
||||||
* PHP QR Code is distributed under LGPL 3
|
* PHP QR Code is distributed under LGPL 3
|
||||||
* Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
|
* Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
|
||||||
|
@ -297,6 +298,19 @@
|
||||||
</table>';
|
</table>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function save($content, $filename_path)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$handle = fopen($filename_path, "w");
|
||||||
|
fwrite($handle, $content);
|
||||||
|
fclose($handle);
|
||||||
|
return true;
|
||||||
|
} catch (Exception $e) {
|
||||||
|
echo 'Exception reçue : ', $e->getMessage(), "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//##########################################################################
|
//##########################################################################
|
||||||
|
@ -938,9 +952,9 @@
|
||||||
class QRimage {
|
class QRimage {
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE)
|
public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color, $fore_color)
|
||||||
{
|
{
|
||||||
$image = self::image($frame, $pixelPerPoint, $outerFrame);
|
$image = self::image($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color);
|
||||||
|
|
||||||
if ($filename === false) {
|
if ($filename === false) {
|
||||||
Header("Content-type: image/png");
|
Header("Content-type: image/png");
|
||||||
|
@ -974,7 +988,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4)
|
private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000)
|
||||||
{
|
{
|
||||||
$h = count($frame);
|
$h = count($frame);
|
||||||
$w = strlen($frame[0]);
|
$w = strlen($frame[0]);
|
||||||
|
@ -984,8 +998,20 @@
|
||||||
|
|
||||||
$base_image =ImageCreate($imgW, $imgH);
|
$base_image =ImageCreate($imgW, $imgH);
|
||||||
|
|
||||||
$col[0] = ImageColorAllocate($base_image,255,255,255);
|
// convert a hexadecimal color code into decimal format (red = 255 0 0, green = 0 255 0, blue = 0 0 255)
|
||||||
$col[1] = ImageColorAllocate($base_image,0,0,0);
|
$r1 = round((($fore_color & 0xFF0000) >> 16), 5);
|
||||||
|
$g1 = round((($fore_color & 0x00FF00) >> 8), 5);
|
||||||
|
$b1 = round(($fore_color & 0x0000FF), 5);
|
||||||
|
|
||||||
|
// convert a hexadecimal color code into decimal format (red = 255 0 0, green = 0 255 0, blue = 0 0 255)
|
||||||
|
$r2 = round((($back_color & 0xFF0000) >> 16), 5);
|
||||||
|
$g2 = round((($back_color & 0x00FF00) >> 8), 5);
|
||||||
|
$b2 = round(($back_color & 0x0000FF), 5);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$col[0] = ImageColorAllocate($base_image, $r2, $g2, $b2);
|
||||||
|
$col[1] = ImageColorAllocate($base_image, $r1, $g1, $b1);
|
||||||
|
|
||||||
imagefill($base_image, 0, 0, $col[0]);
|
imagefill($base_image, 0, 0, $col[0]);
|
||||||
|
|
||||||
|
@ -1007,6 +1033,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//---- qrinput.php -----------------------------
|
//---- qrinput.php -----------------------------
|
||||||
|
|
||||||
|
|
||||||
|
@ -1058,7 +1085,6 @@
|
||||||
|
|
||||||
if(!QRinput::check($mode, $size, $setData)) {
|
if(!QRinput::check($mode, $size, $setData)) {
|
||||||
throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData));
|
throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData));
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->mode = $mode;
|
$this->mode = $mode;
|
||||||
|
@ -1296,7 +1322,6 @@
|
||||||
{
|
{
|
||||||
if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) {
|
if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) {
|
||||||
throw new Exception('Invalid version no');
|
throw new Exception('Invalid version no');
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->version = $version;
|
$this->version = $version;
|
||||||
|
@ -1633,7 +1658,6 @@
|
||||||
$ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level);
|
$ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level);
|
||||||
if($ver < 0) {
|
if($ver < 0) {
|
||||||
throw new Exception('WRONG VERSION');
|
throw new Exception('WRONG VERSION');
|
||||||
return -1;
|
|
||||||
} else if($ver > $this->getVersion()) {
|
} else if($ver > $this->getVersion()) {
|
||||||
$this->setVersion($ver);
|
$this->setVersion($ver);
|
||||||
} else {
|
} else {
|
||||||
|
@ -2123,7 +2147,7 @@
|
||||||
if($ret < 0)
|
if($ret < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return $run;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -2195,7 +2219,7 @@
|
||||||
case QR_MODE_NUM: $length = $this->eatNum(); break;
|
case QR_MODE_NUM: $length = $this->eatNum(); break;
|
||||||
case QR_MODE_AN: $length = $this->eatAn(); break;
|
case QR_MODE_AN: $length = $this->eatAn(); break;
|
||||||
case QR_MODE_KANJI:
|
case QR_MODE_KANJI:
|
||||||
if ($hint == QR_MODE_KANJI)
|
if ($mode == QR_MODE_KANJI)
|
||||||
$length = $this->eatKanji();
|
$length = $this->eatKanji();
|
||||||
else $length = $this->eat8();
|
else $length = $this->eat8();
|
||||||
break;
|
break;
|
||||||
|
@ -2217,7 +2241,7 @@
|
||||||
$p = 0;
|
$p = 0;
|
||||||
|
|
||||||
while ($p<$stringLen) {
|
while ($p<$stringLen) {
|
||||||
$mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint);
|
$mode = self::identifyMode(substr($this->dataStr, $p));
|
||||||
if($mode == QR_MODE_KANJI) {
|
if($mode == QR_MODE_KANJI) {
|
||||||
$p += 2;
|
$p += 2;
|
||||||
} else {
|
} else {
|
||||||
|
@ -3051,7 +3075,7 @@
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
public function encodeString8bit($string, $version, $level)
|
public function encodeString8bit($string, $version, $level)
|
||||||
{
|
{
|
||||||
if(string == NULL) {
|
if($string == NULL) {
|
||||||
throw new Exception('empty string!');
|
throw new Exception('empty string!');
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -3088,9 +3112,9 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
|
public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000)
|
||||||
{
|
{
|
||||||
$enc = QRencode::factory($level, $size, $margin);
|
$enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color);
|
||||||
return $enc->encodePNG($text, $outfile, $saveandprint=false);
|
return $enc->encodePNG($text, $outfile, $saveandprint=false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3101,6 +3125,20 @@
|
||||||
return $enc->encode($text, $outfile);
|
return $enc->encode($text, $outfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
public static function eps($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false)
|
||||||
|
{
|
||||||
|
$enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color, $cmyk);
|
||||||
|
return $enc->encodeEPS($text, $outfile, $saveandprint=false);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
public static function svg($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000)
|
||||||
|
{
|
||||||
|
$enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color);
|
||||||
|
return $enc->encodeSVG($text, $outfile, $saveandprint=false);
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4)
|
public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4)
|
||||||
{
|
{
|
||||||
|
@ -3209,6 +3247,8 @@
|
||||||
public $version = 0;
|
public $version = 0;
|
||||||
public $size = 3;
|
public $size = 3;
|
||||||
public $margin = 4;
|
public $margin = 4;
|
||||||
|
public $back_color = 0xFFFFFF;
|
||||||
|
public $fore_color = 0x000000;
|
||||||
|
|
||||||
public $structured = 0; // not supported yet
|
public $structured = 0; // not supported yet
|
||||||
|
|
||||||
|
@ -3216,11 +3256,14 @@
|
||||||
public $hint = QR_MODE_8;
|
public $hint = QR_MODE_8;
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4)
|
public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false)
|
||||||
{
|
{
|
||||||
$enc = new QRencode();
|
$enc = new QRencode();
|
||||||
$enc->size = $size;
|
$enc->size = $size;
|
||||||
$enc->margin = $margin;
|
$enc->margin = $margin;
|
||||||
|
$enc->fore_color = $fore_color;
|
||||||
|
$enc->back_color = $back_color;
|
||||||
|
$enc->cmyk = $cmyk;
|
||||||
|
|
||||||
switch ($level.'') {
|
switch ($level.'') {
|
||||||
case '0':
|
case '0':
|
||||||
|
@ -3299,7 +3342,55 @@
|
||||||
|
|
||||||
$maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin));
|
$maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin));
|
||||||
|
|
||||||
QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint);
|
QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color);
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
|
||||||
|
QRtools::log($outfile, $e->getMessage());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
public function encodeEPS($intext, $outfile = false,$saveandprint=false)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
$tab = $this->encode($intext);
|
||||||
|
$err = ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
|
||||||
|
if ($err != '')
|
||||||
|
QRtools::log($outfile, $err);
|
||||||
|
|
||||||
|
$maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin));
|
||||||
|
|
||||||
|
QRvect::eps($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color, $this->cmyk);
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
|
||||||
|
QRtools::log($outfile, $e->getMessage());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
public function encodeSVG($intext, $outfile = false,$saveandprint=false)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
$tab = $this->encode($intext);
|
||||||
|
$err = ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
|
||||||
|
if ($err != '')
|
||||||
|
QRtools::log($outfile, $err);
|
||||||
|
|
||||||
|
$maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin));
|
||||||
|
|
||||||
|
QRvect::svg($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color);
|
||||||
|
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
|
|
||||||
|
@ -3310,3 +3401,225 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//---- qrvect.php -----------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PHP QR Code encoder
|
||||||
|
*
|
||||||
|
* Image output of code using GD2
|
||||||
|
*
|
||||||
|
* PHP QR Code is distributed under LGPL 3
|
||||||
|
* Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 3 of the License, or any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
define('QR_VECT', true);
|
||||||
|
|
||||||
|
class QRvect {
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
public static function eps($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false)
|
||||||
|
{
|
||||||
|
$vect = self::vectEPS($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color, $cmyk);
|
||||||
|
|
||||||
|
if ($filename === false) {
|
||||||
|
header("Content-Type: application/postscript");
|
||||||
|
header('Content-Disposition: filename="qrcode.eps"');
|
||||||
|
echo $vect;
|
||||||
|
} else {
|
||||||
|
if($saveandprint===TRUE){
|
||||||
|
QRtools::save($vect, $filename);
|
||||||
|
header("Content-Type: application/postscript");
|
||||||
|
header('Content-Disposition: filename="qrcode.eps"');
|
||||||
|
echo $vect;
|
||||||
|
}else{
|
||||||
|
QRtools::save($vect, $filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
private static function vectEPS($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false)
|
||||||
|
{
|
||||||
|
$h = count($frame);
|
||||||
|
$w = strlen($frame[0]);
|
||||||
|
|
||||||
|
$imgW = $w + 2*$outerFrame;
|
||||||
|
$imgH = $h + 2*$outerFrame;
|
||||||
|
|
||||||
|
if ($cmyk)
|
||||||
|
{
|
||||||
|
// convert color value into decimal eps format
|
||||||
|
$c = round((($fore_color & 0xFF000000) >> 16) / 255, 5);
|
||||||
|
$m = round((($fore_color & 0x00FF0000) >> 16) / 255, 5);
|
||||||
|
$y = round((($fore_color & 0x0000FF00) >> 8) / 255, 5);
|
||||||
|
$k = round(($fore_color & 0x000000FF) / 255, 5);
|
||||||
|
$fore_color_string = $c.' '.$m.' '.$y.' '.$k.' setcmykcolor'."\n";
|
||||||
|
|
||||||
|
// convert color value into decimal eps format
|
||||||
|
$c = round((($back_color & 0xFF000000) >> 16) / 255, 5);
|
||||||
|
$m = round((($back_color & 0x00FF0000) >> 16) / 255, 5);
|
||||||
|
$y = round((($back_color & 0x0000FF00) >> 8) / 255, 5);
|
||||||
|
$k = round(($back_color & 0x000000FF) / 255, 5);
|
||||||
|
$back_color_string = $c.' '.$m.' '.$y.' '.$k.' setcmykcolor'."\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// convert a hexadecimal color code into decimal eps format (green = 0 1 0, blue = 0 0 1, ...)
|
||||||
|
$r = round((($fore_color & 0xFF0000) >> 16) / 255, 5);
|
||||||
|
$b = round((($fore_color & 0x00FF00) >> 8) / 255, 5);
|
||||||
|
$g = round(($fore_color & 0x0000FF) / 255, 5);
|
||||||
|
$fore_color_string = $r.' '.$b.' '.$g.' setrgbcolor'."\n";
|
||||||
|
|
||||||
|
// convert a hexadecimal color code into decimal eps format (green = 0 1 0, blue = 0 0 1, ...)
|
||||||
|
$r = round((($back_color & 0xFF0000) >> 16) / 255, 5);
|
||||||
|
$b = round((($back_color & 0x00FF00) >> 8) / 255, 5);
|
||||||
|
$g = round(($back_color & 0x0000FF) / 255, 5);
|
||||||
|
$back_color_string = $r.' '.$b.' '.$g.' setrgbcolor'."\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$output =
|
||||||
|
'%!PS-Adobe EPSF-3.0'."\n".
|
||||||
|
'%%Creator: PHPQrcodeLib'."\n".
|
||||||
|
'%%Title: QRcode'."\n".
|
||||||
|
'%%CreationDate: '.date('Y-m-d')."\n".
|
||||||
|
'%%DocumentData: Clean7Bit'."\n".
|
||||||
|
'%%LanguageLevel: 2'."\n".
|
||||||
|
'%%Pages: 1'."\n".
|
||||||
|
'%%BoundingBox: 0 0 '.$imgW * $pixelPerPoint.' '.$imgH * $pixelPerPoint."\n";
|
||||||
|
|
||||||
|
// set the scale
|
||||||
|
$output .= $pixelPerPoint.' '.$pixelPerPoint.' scale'."\n";
|
||||||
|
// position the center of the coordinate system
|
||||||
|
|
||||||
|
$output .= $outerFrame.' '.$outerFrame.' translate'."\n";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// redefine the 'rectfill' operator to shorten the syntax
|
||||||
|
$output .= '/F { rectfill } def'."\n";
|
||||||
|
|
||||||
|
// set the symbol color
|
||||||
|
$output .= $back_color_string;
|
||||||
|
$output .= '-'.$outerFrame.' -'.$outerFrame.' '.($w + 2*$outerFrame).' '.($h + 2*$outerFrame).' F'."\n";
|
||||||
|
|
||||||
|
|
||||||
|
// set the symbol color
|
||||||
|
$output .= $fore_color_string;
|
||||||
|
|
||||||
|
// Convert the matrix into pixels
|
||||||
|
|
||||||
|
for($i=0; $i<$h; $i++) {
|
||||||
|
for($j=0; $j<$w; $j++) {
|
||||||
|
if( $frame[$i][$j] == '1') {
|
||||||
|
$y = $h - 1 - $i;
|
||||||
|
$x = $j;
|
||||||
|
$output .= $x.' '.$y.' 1 1 F'."\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$output .='%%EOF';
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
public static function svg($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color, $fore_color)
|
||||||
|
{
|
||||||
|
$vect = self::vectSVG($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color);
|
||||||
|
|
||||||
|
if ($filename === false) {
|
||||||
|
header("Content-Type: image/svg+xml");
|
||||||
|
//header('Content-Disposition: attachment, filename="qrcode.svg"');
|
||||||
|
echo $vect;
|
||||||
|
} else {
|
||||||
|
if($saveandprint===TRUE){
|
||||||
|
QRtools::save($vect, $filename);
|
||||||
|
header("Content-Type: image/svg+xml");
|
||||||
|
//header('Content-Disposition: filename="'.$filename.'"');
|
||||||
|
echo $vect;
|
||||||
|
}else{
|
||||||
|
QRtools::save($vect, $filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
private static function vectSVG($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000)
|
||||||
|
{
|
||||||
|
$h = count($frame);
|
||||||
|
$w = strlen($frame[0]);
|
||||||
|
|
||||||
|
$imgW = $w + 2*$outerFrame;
|
||||||
|
$imgH = $h + 2*$outerFrame;
|
||||||
|
|
||||||
|
|
||||||
|
$output =
|
||||||
|
'<?xml version="1.0" encoding="utf-8"?>'."\n".
|
||||||
|
'<svg version="1.1" baseProfile="full" width="'.$imgW * $pixelPerPoint.'" height="'.$imgH * $pixelPerPoint.'" viewBox="0 0 '.$imgW * $pixelPerPoint.' '.$imgH * $pixelPerPoint.'"
|
||||||
|
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events">'."\n".
|
||||||
|
'<desc></desc>'."\n";
|
||||||
|
|
||||||
|
$output =
|
||||||
|
'<?xml version="1.0" encoding="utf-8"?>'."\n".
|
||||||
|
'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">'."\n".
|
||||||
|
'<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" xmlns:xlink="http://www.w3.org/1999/xlink" width="'.$imgW * $pixelPerPoint.'" height="'.$imgH * $pixelPerPoint.'" viewBox="0 0 '.$imgW * $pixelPerPoint.' '.$imgH * $pixelPerPoint.'">'."\n".
|
||||||
|
'<desc></desc>'."\n";
|
||||||
|
|
||||||
|
if(!empty($back_color)) {
|
||||||
|
$backgroundcolor = str_pad(dechex($back_color), 6, "0", STR_PAD_LEFT);
|
||||||
|
$output .= '<rect width="'.$imgW * $pixelPerPoint.'" height="'.$imgH * $pixelPerPoint.'" fill="#'.$backgroundcolor.'" cx="0" cy="0" />'."\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$output .=
|
||||||
|
'<defs>'."\n".
|
||||||
|
'<rect id="p" width="'.$pixelPerPoint.'" height="'.$pixelPerPoint.'" />'."\n".
|
||||||
|
'</defs>'."\n".
|
||||||
|
'<g fill="#'.str_pad(dechex($fore_color), 6, "0", STR_PAD_LEFT).'">'."\n";
|
||||||
|
|
||||||
|
|
||||||
|
// Convert the matrix into pixels
|
||||||
|
|
||||||
|
for($i=0; $i<$h; $i++) {
|
||||||
|
for($j=0; $j<$w; $j++) {
|
||||||
|
if( $frame[$i][$j] == '1') {
|
||||||
|
$y = ($i + $outerFrame) * $pixelPerPoint;
|
||||||
|
$x = ($j + $outerFrame) * $pixelPerPoint;
|
||||||
|
$output .= '<use x="'.$x.'" y="'.$y.'" xlink:href="#p" />'."\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$output .=
|
||||||
|
'</g>'."\n".
|
||||||
|
'</svg>';
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -129,7 +129,7 @@
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
public function getCode()
|
public function getCode()
|
||||||
{
|
{
|
||||||
$ret;
|
$ret = NULL;
|
||||||
|
|
||||||
if($this->count < $this->dataLength) {
|
if($this->count < $this->dataLength) {
|
||||||
$row = $this->count % $this->blocks;
|
$row = $this->count % $this->blocks;
|
||||||
|
@ -243,7 +243,7 @@
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
public function encodeString8bit($string, $version, $level)
|
public function encodeString8bit($string, $version, $level)
|
||||||
{
|
{
|
||||||
if(string == NULL) {
|
if($string == NULL) {
|
||||||
throw new Exception('empty string!');
|
throw new Exception('empty string!');
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -280,9 +280,9 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
|
public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000)
|
||||||
{
|
{
|
||||||
$enc = QRencode::factory($level, $size, $margin);
|
$enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color);
|
||||||
return $enc->encodePNG($text, $outfile, $saveandprint=false);
|
return $enc->encodePNG($text, $outfile, $saveandprint=false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -293,6 +293,20 @@
|
||||||
return $enc->encode($text, $outfile);
|
return $enc->encode($text, $outfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
public static function eps($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false)
|
||||||
|
{
|
||||||
|
$enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color, $cmyk);
|
||||||
|
return $enc->encodeEPS($text, $outfile, $saveandprint=false);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
public static function svg($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000)
|
||||||
|
{
|
||||||
|
$enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color);
|
||||||
|
return $enc->encodeSVG($text, $outfile, $saveandprint=false);
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4)
|
public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4)
|
||||||
{
|
{
|
||||||
|
@ -401,6 +415,8 @@
|
||||||
public $version = 0;
|
public $version = 0;
|
||||||
public $size = 3;
|
public $size = 3;
|
||||||
public $margin = 4;
|
public $margin = 4;
|
||||||
|
public $back_color = 0xFFFFFF;
|
||||||
|
public $fore_color = 0x000000;
|
||||||
|
|
||||||
public $structured = 0; // not supported yet
|
public $structured = 0; // not supported yet
|
||||||
|
|
||||||
|
@ -408,11 +424,14 @@
|
||||||
public $hint = QR_MODE_8;
|
public $hint = QR_MODE_8;
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4)
|
public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false)
|
||||||
{
|
{
|
||||||
$enc = new QRencode();
|
$enc = new QRencode();
|
||||||
$enc->size = $size;
|
$enc->size = $size;
|
||||||
$enc->margin = $margin;
|
$enc->margin = $margin;
|
||||||
|
$enc->fore_color = $fore_color;
|
||||||
|
$enc->back_color = $back_color;
|
||||||
|
$enc->cmyk = $cmyk;
|
||||||
|
|
||||||
switch ($level.'') {
|
switch ($level.'') {
|
||||||
case '0':
|
case '0':
|
||||||
|
@ -491,7 +510,55 @@
|
||||||
|
|
||||||
$maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin));
|
$maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin));
|
||||||
|
|
||||||
QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint);
|
QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color);
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
|
||||||
|
QRtools::log($outfile, $e->getMessage());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
public function encodeEPS($intext, $outfile = false,$saveandprint=false)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
$tab = $this->encode($intext);
|
||||||
|
$err = ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
|
||||||
|
if ($err != '')
|
||||||
|
QRtools::log($outfile, $err);
|
||||||
|
|
||||||
|
$maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin));
|
||||||
|
|
||||||
|
QRvect::eps($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color, $this->cmyk);
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
|
||||||
|
QRtools::log($outfile, $e->getMessage());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
public function encodeSVG($intext, $outfile = false,$saveandprint=false)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
$tab = $this->encode($intext);
|
||||||
|
$err = ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
|
||||||
|
if ($err != '')
|
||||||
|
QRtools::log($outfile, $err);
|
||||||
|
|
||||||
|
$maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin));
|
||||||
|
|
||||||
|
QRvect::svg($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color);
|
||||||
|
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
|
|
||||||
|
|
|
@ -27,9 +27,9 @@
|
||||||
class QRimage {
|
class QRimage {
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE)
|
public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color, $fore_color)
|
||||||
{
|
{
|
||||||
$image = self::image($frame, $pixelPerPoint, $outerFrame);
|
$image = self::image($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color);
|
||||||
|
|
||||||
if ($filename === false) {
|
if ($filename === false) {
|
||||||
Header("Content-type: image/png");
|
Header("Content-type: image/png");
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4)
|
private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000)
|
||||||
{
|
{
|
||||||
$h = count($frame);
|
$h = count($frame);
|
||||||
$w = strlen($frame[0]);
|
$w = strlen($frame[0]);
|
||||||
|
@ -73,8 +73,20 @@
|
||||||
|
|
||||||
$base_image =ImageCreate($imgW, $imgH);
|
$base_image =ImageCreate($imgW, $imgH);
|
||||||
|
|
||||||
$col[0] = ImageColorAllocate($base_image,255,255,255);
|
// convert a hexadecimal color code into decimal format (red = 255 0 0, green = 0 255 0, blue = 0 0 255)
|
||||||
$col[1] = ImageColorAllocate($base_image,0,0,0);
|
$r1 = round((($fore_color & 0xFF0000) >> 16), 5);
|
||||||
|
$g1 = round((($fore_color & 0x00FF00) >> 8), 5);
|
||||||
|
$b1 = round(($fore_color & 0x0000FF), 5);
|
||||||
|
|
||||||
|
// convert a hexadecimal color code into decimal format (red = 255 0 0, green = 0 255 0, blue = 0 0 255)
|
||||||
|
$r2 = round((($back_color & 0xFF0000) >> 16), 5);
|
||||||
|
$g2 = round((($back_color & 0x00FF00) >> 8), 5);
|
||||||
|
$b2 = round(($back_color & 0x0000FF), 5);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$col[0] = ImageColorAllocate($base_image, $r2, $g2, $b2);
|
||||||
|
$col[1] = ImageColorAllocate($base_image, $r1, $g1, $b1);
|
||||||
|
|
||||||
imagefill($base_image, 0, 0, $col[0]);
|
imagefill($base_image, 0, 0, $col[0]);
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,6 @@
|
||||||
|
|
||||||
if(!QRinput::check($mode, $size, $setData)) {
|
if(!QRinput::check($mode, $size, $setData)) {
|
||||||
throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData));
|
throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData));
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->mode = $mode;
|
$this->mode = $mode;
|
||||||
|
@ -283,7 +282,6 @@
|
||||||
{
|
{
|
||||||
if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) {
|
if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) {
|
||||||
throw new Exception('Invalid version no');
|
throw new Exception('Invalid version no');
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->version = $version;
|
$this->version = $version;
|
||||||
|
@ -620,7 +618,6 @@
|
||||||
$ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level);
|
$ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level);
|
||||||
if($ver < 0) {
|
if($ver < 0) {
|
||||||
throw new Exception('WRONG VERSION');
|
throw new Exception('WRONG VERSION');
|
||||||
return -1;
|
|
||||||
} else if($ver > $this->getVersion()) {
|
} else if($ver > $this->getVersion()) {
|
||||||
$this->setVersion($ver);
|
$this->setVersion($ver);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
include $QR_BASEDIR."qrtools.php";
|
include $QR_BASEDIR."qrtools.php";
|
||||||
include $QR_BASEDIR."qrspec.php";
|
include $QR_BASEDIR."qrspec.php";
|
||||||
include $QR_BASEDIR."qrimage.php";
|
include $QR_BASEDIR."qrimage.php";
|
||||||
|
include $QR_BASEDIR."qrvect.php";
|
||||||
include $QR_BASEDIR."qrinput.php";
|
include $QR_BASEDIR."qrinput.php";
|
||||||
include $QR_BASEDIR."qrbitstream.php";
|
include $QR_BASEDIR."qrbitstream.php";
|
||||||
include $QR_BASEDIR."qrsplit.php";
|
include $QR_BASEDIR."qrsplit.php";
|
||||||
|
|
|
@ -186,7 +186,7 @@
|
||||||
if($ret < 0)
|
if($ret < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return $run;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -258,7 +258,7 @@
|
||||||
case QR_MODE_NUM: $length = $this->eatNum(); break;
|
case QR_MODE_NUM: $length = $this->eatNum(); break;
|
||||||
case QR_MODE_AN: $length = $this->eatAn(); break;
|
case QR_MODE_AN: $length = $this->eatAn(); break;
|
||||||
case QR_MODE_KANJI:
|
case QR_MODE_KANJI:
|
||||||
if ($hint == QR_MODE_KANJI)
|
if ($mode == QR_MODE_KANJI)
|
||||||
$length = $this->eatKanji();
|
$length = $this->eatKanji();
|
||||||
else $length = $this->eat8();
|
else $length = $this->eat8();
|
||||||
break;
|
break;
|
||||||
|
@ -280,7 +280,7 @@
|
||||||
$p = 0;
|
$p = 0;
|
||||||
|
|
||||||
while ($p<$stringLen) {
|
while ($p<$stringLen) {
|
||||||
$mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint);
|
$mode = self::identifyMode(substr($this->dataStr, $p));
|
||||||
if($mode == QR_MODE_KANJI) {
|
if($mode == QR_MODE_KANJI) {
|
||||||
$p += 2;
|
$p += 2;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -164,6 +164,19 @@
|
||||||
</table>';
|
</table>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function save($content, $filename_path)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$handle = fopen($filename_path, "w");
|
||||||
|
fwrite($handle, $content);
|
||||||
|
fclose($handle);
|
||||||
|
return true;
|
||||||
|
} catch (Exception $e) {
|
||||||
|
echo 'Exception reçue : ', $e->getMessage(), "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//##########################################################################
|
//##########################################################################
|
||||||
|
|
214
phpqrcode/qrvect.php
Executable file
214
phpqrcode/qrvect.php
Executable file
|
@ -0,0 +1,214 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* PHP QR Code encoder
|
||||||
|
*
|
||||||
|
* Image output of code using GD2
|
||||||
|
*
|
||||||
|
* PHP QR Code is distributed under LGPL 3
|
||||||
|
* Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 3 of the License, or any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
define('QR_VECT', true);
|
||||||
|
|
||||||
|
class QRvect {
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
public static function eps($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false)
|
||||||
|
{
|
||||||
|
$vect = self::vectEPS($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color, $cmyk);
|
||||||
|
|
||||||
|
if ($filename === false) {
|
||||||
|
header("Content-Type: application/postscript");
|
||||||
|
header('Content-Disposition: filename="qrcode.eps"');
|
||||||
|
echo $vect;
|
||||||
|
} else {
|
||||||
|
if($saveandprint===TRUE){
|
||||||
|
QRtools::save($vect, $filename);
|
||||||
|
header("Content-Type: application/postscript");
|
||||||
|
header('Content-Disposition: filename="qrcode.eps"');
|
||||||
|
echo $vect;
|
||||||
|
}else{
|
||||||
|
QRtools::save($vect, $filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
private static function vectEPS($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false)
|
||||||
|
{
|
||||||
|
$h = count($frame);
|
||||||
|
$w = strlen($frame[0]);
|
||||||
|
|
||||||
|
$imgW = $w + 2*$outerFrame;
|
||||||
|
$imgH = $h + 2*$outerFrame;
|
||||||
|
|
||||||
|
if ($cmyk)
|
||||||
|
{
|
||||||
|
// convert color value into decimal eps format
|
||||||
|
$c = round((($fore_color & 0xFF000000) >> 16) / 255, 5);
|
||||||
|
$m = round((($fore_color & 0x00FF0000) >> 16) / 255, 5);
|
||||||
|
$y = round((($fore_color & 0x0000FF00) >> 8) / 255, 5);
|
||||||
|
$k = round(($fore_color & 0x000000FF) / 255, 5);
|
||||||
|
$fore_color_string = $c.' '.$m.' '.$y.' '.$k.' setcmykcolor'."\n";
|
||||||
|
|
||||||
|
// convert color value into decimal eps format
|
||||||
|
$c = round((($back_color & 0xFF000000) >> 16) / 255, 5);
|
||||||
|
$m = round((($back_color & 0x00FF0000) >> 16) / 255, 5);
|
||||||
|
$y = round((($back_color & 0x0000FF00) >> 8) / 255, 5);
|
||||||
|
$k = round(($back_color & 0x000000FF) / 255, 5);
|
||||||
|
$back_color_string = $c.' '.$m.' '.$y.' '.$k.' setcmykcolor'."\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// convert a hexadecimal color code into decimal eps format (green = 0 1 0, blue = 0 0 1, ...)
|
||||||
|
$r = round((($fore_color & 0xFF0000) >> 16) / 255, 5);
|
||||||
|
$b = round((($fore_color & 0x00FF00) >> 8) / 255, 5);
|
||||||
|
$g = round(($fore_color & 0x0000FF) / 255, 5);
|
||||||
|
$fore_color_string = $r.' '.$b.' '.$g.' setrgbcolor'."\n";
|
||||||
|
|
||||||
|
// convert a hexadecimal color code into decimal eps format (green = 0 1 0, blue = 0 0 1, ...)
|
||||||
|
$r = round((($back_color & 0xFF0000) >> 16) / 255, 5);
|
||||||
|
$b = round((($back_color & 0x00FF00) >> 8) / 255, 5);
|
||||||
|
$g = round(($back_color & 0x0000FF) / 255, 5);
|
||||||
|
$back_color_string = $r.' '.$b.' '.$g.' setrgbcolor'."\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$output =
|
||||||
|
'%!PS-Adobe EPSF-3.0'."\n".
|
||||||
|
'%%Creator: PHPQrcodeLib'."\n".
|
||||||
|
'%%Title: QRcode'."\n".
|
||||||
|
'%%CreationDate: '.date('Y-m-d')."\n".
|
||||||
|
'%%DocumentData: Clean7Bit'."\n".
|
||||||
|
'%%LanguageLevel: 2'."\n".
|
||||||
|
'%%Pages: 1'."\n".
|
||||||
|
'%%BoundingBox: 0 0 '.$imgW * $pixelPerPoint.' '.$imgH * $pixelPerPoint."\n";
|
||||||
|
|
||||||
|
// set the scale
|
||||||
|
$output .= $pixelPerPoint.' '.$pixelPerPoint.' scale'."\n";
|
||||||
|
// position the center of the coordinate system
|
||||||
|
|
||||||
|
$output .= $outerFrame.' '.$outerFrame.' translate'."\n";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// redefine the 'rectfill' operator to shorten the syntax
|
||||||
|
$output .= '/F { rectfill } def'."\n";
|
||||||
|
|
||||||
|
// set the symbol color
|
||||||
|
$output .= $back_color_string;
|
||||||
|
$output .= '-'.$outerFrame.' -'.$outerFrame.' '.($w + 2*$outerFrame).' '.($h + 2*$outerFrame).' F'."\n";
|
||||||
|
|
||||||
|
|
||||||
|
// set the symbol color
|
||||||
|
$output .= $fore_color_string;
|
||||||
|
|
||||||
|
// Convert the matrix into pixels
|
||||||
|
|
||||||
|
for($i=0; $i<$h; $i++) {
|
||||||
|
for($j=0; $j<$w; $j++) {
|
||||||
|
if( $frame[$i][$j] == '1') {
|
||||||
|
$y = $h - 1 - $i;
|
||||||
|
$x = $j;
|
||||||
|
$output .= $x.' '.$y.' 1 1 F'."\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$output .='%%EOF';
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
public static function svg($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color, $fore_color)
|
||||||
|
{
|
||||||
|
$vect = self::vectSVG($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color);
|
||||||
|
|
||||||
|
if ($filename === false) {
|
||||||
|
header("Content-Type: image/svg+xml");
|
||||||
|
//header('Content-Disposition: attachment, filename="qrcode.svg"');
|
||||||
|
echo $vect;
|
||||||
|
} else {
|
||||||
|
if($saveandprint===TRUE){
|
||||||
|
QRtools::save($vect, $filename);
|
||||||
|
header("Content-Type: image/svg+xml");
|
||||||
|
//header('Content-Disposition: filename="'.$filename.'"');
|
||||||
|
echo $vect;
|
||||||
|
}else{
|
||||||
|
QRtools::save($vect, $filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
private static function vectSVG($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000)
|
||||||
|
{
|
||||||
|
$h = count($frame);
|
||||||
|
$w = strlen($frame[0]);
|
||||||
|
|
||||||
|
$imgW = $w + 2*$outerFrame;
|
||||||
|
$imgH = $h + 2*$outerFrame;
|
||||||
|
|
||||||
|
|
||||||
|
$output =
|
||||||
|
'<?xml version="1.0" encoding="utf-8"?>'."\n".
|
||||||
|
'<svg version="1.1" baseProfile="full" width="'.$imgW * $pixelPerPoint.'" height="'.$imgH * $pixelPerPoint.'" viewBox="0 0 '.$imgW * $pixelPerPoint.' '.$imgH * $pixelPerPoint.'"
|
||||||
|
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events">'."\n".
|
||||||
|
'<desc></desc>'."\n";
|
||||||
|
|
||||||
|
$output =
|
||||||
|
'<?xml version="1.0" encoding="utf-8"?>'."\n".
|
||||||
|
'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">'."\n".
|
||||||
|
'<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" xmlns:xlink="http://www.w3.org/1999/xlink" width="'.$imgW * $pixelPerPoint.'" height="'.$imgH * $pixelPerPoint.'" viewBox="0 0 '.$imgW * $pixelPerPoint.' '.$imgH * $pixelPerPoint.'">'."\n".
|
||||||
|
'<desc></desc>'."\n";
|
||||||
|
|
||||||
|
if(!empty($back_color)) {
|
||||||
|
$backgroundcolor = str_pad(dechex($back_color), 6, "0", STR_PAD_LEFT);
|
||||||
|
$output .= '<rect width="'.$imgW * $pixelPerPoint.'" height="'.$imgH * $pixelPerPoint.'" fill="#'.$backgroundcolor.'" cx="0" cy="0" />'."\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$output .=
|
||||||
|
'<defs>'."\n".
|
||||||
|
'<rect id="p" width="'.$pixelPerPoint.'" height="'.$pixelPerPoint.'" />'."\n".
|
||||||
|
'</defs>'."\n".
|
||||||
|
'<g fill="#'.str_pad(dechex($fore_color), 6, "0", STR_PAD_LEFT).'">'."\n";
|
||||||
|
|
||||||
|
|
||||||
|
// Convert the matrix into pixels
|
||||||
|
|
||||||
|
for($i=0; $i<$h; $i++) {
|
||||||
|
for($j=0; $j<$w; $j++) {
|
||||||
|
if( $frame[$i][$j] == '1') {
|
||||||
|
$y = ($i + $outerFrame) * $pixelPerPoint;
|
||||||
|
$x = ($j + $outerFrame) * $pixelPerPoint;
|
||||||
|
$output .= '<use x="'.$x.'" y="'.$y.'" xlink:href="#p" />'."\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$output .=
|
||||||
|
'</g>'."\n".
|
||||||
|
'</svg>';
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
0
phpqrcode/temp/tempfolder
Executable file
0
phpqrcode/temp/tempfolder
Executable file
|
@ -43,7 +43,8 @@
|
||||||
$QR_BASEDIR.'qrsplit.php',
|
$QR_BASEDIR.'qrsplit.php',
|
||||||
$QR_BASEDIR.'qrrscode.php',
|
$QR_BASEDIR.'qrrscode.php',
|
||||||
$QR_BASEDIR.'qrmask.php',
|
$QR_BASEDIR.'qrmask.php',
|
||||||
$QR_BASEDIR.'qrencode.php'
|
$QR_BASEDIR.'qrencode.php',
|
||||||
|
$QR_BASEDIR.'qrvect.php'
|
||||||
);
|
);
|
||||||
|
|
||||||
$headerFile = $QR_TOOLSDIR.'merged_header.php';
|
$headerFile = $QR_TOOLSDIR.'merged_header.php';
|
||||||
|
|
|
@ -6,14 +6,15 @@
|
||||||
* This file contains MERGED version of PHP QR Code library.
|
* This file contains MERGED version of PHP QR Code library.
|
||||||
* It was auto-generated from full version for your convenience.
|
* It was auto-generated from full version for your convenience.
|
||||||
*
|
*
|
||||||
* This merged version was configured to not requre any external files,
|
* This merged version was configured to not require any external files,
|
||||||
* with disabled cache, error loging and weker but faster mask matching.
|
* with disabled cache, error logging and weaker but faster mask matching.
|
||||||
* If you need tune it up please use non-merged version.
|
* If you need tune it up please use non-merged version.
|
||||||
*
|
*
|
||||||
* For full version, documentation, examples of use please visit:
|
* For full version, documentation, examples of use please visit:
|
||||||
*
|
*
|
||||||
* http://phpqrcode.sourceforge.net/
|
* http://phpqrcode.sourceforge.net/
|
||||||
* https://sourceforge.net/projects/phpqrcode/
|
* https://sourceforge.net/projects/phpqrcode/
|
||||||
|
* https://github.com/t0k4rt/phpqrcode
|
||||||
*
|
*
|
||||||
* PHP QR Code is distributed under LGPL 3
|
* PHP QR Code is distributed under LGPL 3
|
||||||
* Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
|
* Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
|
||||||
|
|
16
style.less
16
style.less
|
@ -1,11 +1,13 @@
|
||||||
|
/*
|
||||||
|
Code publié sous licence Apache 2.0
|
||||||
|
https://code.antopie.org/miraty/qr
|
||||||
|
*/
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: "ubuntu-dl";
|
font-family: "ubuntu-dl";
|
||||||
src: url('ubuntu-dl.ttf');
|
src: url('ubuntu-dl.ttf');
|
||||||
}
|
}
|
||||||
|
|
||||||
#redondance, #marge, #texte, #taille {
|
#redondance, #marge, #texte, #taille {
|
||||||
appearance: none;
|
|
||||||
border: 2px @bordure solid;
|
border: 2px @bordure solid;
|
||||||
border-radius: 7px;
|
border-radius: 7px;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
|
@ -138,11 +140,11 @@ h1, #logo {
|
||||||
|
|
||||||
html {
|
html {
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
width: 400px;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#texte {
|
#texte {
|
||||||
width: 400px;
|
width: 90%;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
|
@ -156,8 +158,8 @@ h1, #logo {
|
||||||
}
|
}
|
||||||
|
|
||||||
::placeholder {
|
::placeholder {
|
||||||
color: @texte;
|
color: fadeout(@texte, 50%);
|
||||||
opacity: 0.6;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Infobulle */
|
/* Infobulle */
|
||||||
|
@ -175,7 +177,7 @@ h1, #logo {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
transform: scale(0) rotate(-12deg);
|
transform: scale(0) rotate(-12deg);
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
background: rgba(0,0,0,.9);
|
background: rgba(0,0,0,1);
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
box-shadow: 0 0 2px rgba(0,0,0,.5);
|
box-shadow: 0 0 2px rgba(0,0,0,.5);
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 287 B |
Loading…
Reference in a new issue