Динамічне створення QR-коду за допомогою PHP [закрито]


98

Я намагаюся генерувати QR-коди на своєму веб-сайті. Все, що їм потрібно зробити, це мати в собі URL-адресу, яку надасть змінна на моєму сайті. Що було б найпростішим способом зробити це?


9
не вигадуй колесо заново! відповіді нижче ідеальні
Jordan Arseno

4
Акор: не могли б ви прийняти мою відповідь? Google припинив API, на який покладається моя відповідь, тому відтепер він мало корисний.
Девід каже, щоб відновити Моніку

Відповіді:


182

Варто додати, що, крім бібліотеки QR-кодів, розміщеної @abaumg , Google надає іAPI QR-кодів API QR-кодів велике спасибі @Toukakoukan за оновлення посилання .

Щоб використовувати це, в основному:

https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=http%3A%2F%2Fwww.google.com%2F&choe=UTF-8
  • 300x300 - розмір QR-зображення, яке потрібно створити,
  • chlє URL-закодовані рядки ви хочете змінити в QR - код, і
  • choeє ( по бажанню) кодування.

Посилання, наведене вище, дає більше деталей, але для його використання потрібно лише srcвказати значення зображення на маніпульоване значення, наприклад:

<img src="https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=http%3A%2F%2Fwww.google.com%2F&choe=UTF-8" title="Link to Google.com" />

Демонстрація:


4
Чи є обмеження щодо використання Google API ?. Я маю на увазі обмеження як: кількість запитів за певний час тощо
Лобо

11
Слід зазначити, що це застаріло. Google планує продовжувати підтримку до 2015 року. Тому, як завжди, застерігайте emptor.
blainarmstrong

4
@Lobo Відповідно до їхньої документації : " Немає обмежень на кількість дзвінків на день, які ви можете зробити до API Google Chart. Однак ми залишаємо за собою право заблокувати будь-яке використання, яке ми вважаємо зловживанням. ".
Александру Гузінські

3
Я знаходжу відповідь @abaumg краще, оскільки це не залежить від третіх сторін, таких як google ...
arod

4
Вересень 2019 р. - досі працює!
Анупам,

87

Найпростіший спосіб генерувати QR-коди за допомогою PHP - це бібліотека phpqrcode .


6
+1 це відповідає на запитання більш точно, ви можете генерувати QR-код самостійно, не обмежуючись обмеженнями Google, які застосовуються до запитів. Це також забезпечить роботу вашого веб-сайту, навіть коли змінюється договір кінцевої точки Google.
Sunny R Gupta

Справедливе попередження: Схоже, ця бібліотека може бути «мертвою» - вона не оновлювалась автором з жовтня 2010 р. І містить кілька латок у відстежувачі випусків, які користувачі бібліотеки повинні розглянути перед застосуванням бібліотеки.
CubicleSoft

але як перетворити його у стандарт mvc будь-які ідеї !!!!
saurabh kamble

@CubicleSoft, думаю, розробник сприйняв ваш коментар серйозно і оновив його відразу
mokNathal

@mokNathal - Я не бачу тут нічого іншого. Останній випуск, доступний на сторінці завантажень, все ще з 2010 року.
CubicleSoft

24

Бібліотеку phpqrcode дуже швидко налаштувати, а документацію щодо API легко зрозуміти.

На додаток до відповіді abaumg, я додав 2 приклади PHPз http://phpqrcode.sourceforge.net/examples/index.php

1. Кодер QR-коду

спочатку включіть бібліотеку з вашого локального шляху

include('../qrlib.php');

потім для виведення зображення безпосередньо у вигляді потоку PNG зробіть, наприклад:

QRcode::png('your texte here...');

щоб зберегти результат локально як зображення PNG:

$tempDir = EXAMPLE_TMP_SERVERPATH;

$codeContents = 'your message here...';

$fileName = 'qrcode_name.png';

$pngAbsoluteFilePath = $tempDir.$fileName;
$urlRelativeFilePath = EXAMPLE_TMP_URLRELPATH.$fileName;

QRcode::png($codeContents, $pngAbsoluteFilePath); 

2. Декодер QR-коду

Дивіться також декодер zxing :

http://zxing.org/w/decode.jspx

Дуже корисно перевірити вихідні дані.

3. Список формату даних

Список формату даних, який ви можете використовувати у своєму QR-коді відповідно до типу даних:

  • URL-адреса веб-сайту: http://stackoverflow.com (включаючи протокол http://)
  • електронна адреса: mailto: name@example.com
  • Номер телефону: +16365553344 (включаючи код країни)
  • SMS-повідомлення: smsto: номер: повідомлення
  • Повідомлення MMS: mms: номер: тема
  • Відео YouTube: youtube: // ID (може працювати на iPhone, не стандартизовано)

здається, ця бібліотека не працює для різноманітних введень, маленький та простий текст все гаразд
duckduckgo,

Чи можете ви навести приклад?
RafaSashi

нічого особливого, коли я роблю $ codeContents = "www.example.com", це нормально, але якщо я роблю $ codeContents = "www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttIr1B0=", воно не відображає правильного зображення.
duckduckgo

Я не можу відтворити помилку. Він чудово працює з QRcode :: png ('www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttI‌ r1B0 ='); можливо, це має щось
спільне

2
Чи можу я використовувати бібліотеку php-qrcode для комерційних цілей, наприклад, для розробки веб-сайту, який вимагає qr-коду в якійсь своїй частині?
Suneeta Singh

15

Бібліотека endroid / QrCode проста у використанні, добре підтримується і може бути встановлена ​​за допомогою композитора. Існує також комплект, який можна використовувати безпосередньо з Symfony.

Встановлення:

$ composer require endroid/qrcode

Використання:

<?php

use Endroid\QrCode\QrCode;

$qrCode = new QrCode();
$qrCode
    ->setText('Life is too short to be generating QR codes')
    ->setSize(300)
    ->setPadding(10)
    ->setErrorCorrection('high')
    ->setForegroundColor(array('r' => 0, 'g' => 0, 'b' => 0, 'a' => 0))
    ->setBackgroundColor(array('r' => 255, 'g' => 255, 'b' => 255, 'a' => 0))
    ->setLabel('Scan the code')
    ->setLabelFontSize(16)
    ->setImageType(QrCode::IMAGE_TYPE_PNG)
;

// now we can directly output the qrcode
header('Content-Type: '.$qrCode->getContentType());
$qrCode->render();

// or create a response object
$response = new Response($qrCode->get(), 200, array('Content-Type' => $qrCode->getContentType()));

Створений QRCode


Івазару, сер, як я можу користуватися, setText()якщо у мене БІЛЬШО даних? Наприклад, у мене є $a = 1, $b = 2, $c = 3?. Мені потрібно використовувати більше ОДНОГО речення або рядка. Як я можу це зробити?

Оскільки setTextметод приймає лише один параметр, я думаю, вам слід об'єднати свої змінні в один, перш ніж передавати його. Але я не впевнений, що правильно розумію вашу проблему, можливо, вам слід відкрити проблему в репозитарії бібліотеки.
Івазару,

Iwazaru Я отримав відповідь, сер ..

Хочете поділитися цим? ;)
Івазару

1
Звичайно :) Я використовував implode () у php для об'єднання всіх даних, а потім explode (), якщо потрібно.

10

qrcode-генератор на Github. Найпростіший сценарій і працює як шарм.

Плюси:

  • Відсутність залежності від третьої сторони
  • Немає обмежень щодо кількості поколінь QR-кодів

Я не можу знайти жодних документів щодо цього, але це виглядає чудово!
Бьорн С

@ praba230890 чи не могли б Ви навести ще кілька прикладів із цим сценарієм? Я намагаюся отримати деяку контактну інформацію в QR-коді 300x300 px. Я встановив / завантажив сценарій на своєму localhost, і sample_html.php працює. Але два інших ні. мій японський не такий хороший (добре, я скористаюся перекладом google)
Алекс,

о, і це було б швидше / краще, ніж бібліотека phpqrcode?
алекс

це відчайдушно.
navjot singh

5

Я вже деякий час використовую google qrcode api, але мені це не зовсім подобається, тому що для доступу до створеного зображення мені потрібно бути в Інтернеті.

Я провів невелике дослідження в командному рядку і виявив, що linux має інструмент командного рядка qrencodeдля генерації qr-кодів.

Я написав цей маленький сценарій. І хороша частина полягає в тому, що сформоване зображення має розмір менше 1 КБ. Ну, надані дані - це просто URL-адреса.

$url = ($_SERVER['HTTPS'] ? "https://" : "http://").$_SERVER['HTTP_HOST'].'/profile.php?id='.$_GET['pid'];
$img = shell_exec('qrencode --output=- -m=1 '.escapeshellarg($url));

$imgData = "data:image/png;base64,".base64_encode($img);

Потім у html завантажую зображення:

<img class="emrQRCode" src="<?=$imgData ?>" />

Вам просто потрібно встановити його. [більшість програм для обробки зображень на Linux встановили б його під капотом, без того, щоб ви цього зрозуміли.


8
Що станеться, якщо ви перейдете доhttp://www.example.com/profile.php?pid=;rm%20-rf%20--no-preserve-root%20/ ?
Doktor J

escapeshellarg пояснено тут (для тих, хто цікавиться) - stackoverflow.com/a/22739494/195722 . Особисто я щоразу не звертався до команди (особливо для публічного покоління), і я б точно використовував регулярні вирази, щоб переконатися, що те, що вони передали, було рядком, який я очікував.
Наталі Адамс,

добре працює на ubuntu 16.04
Asuquo12

4

Я знаю, що питання полягає в тому, як генерувати QR-коди за допомогою PHP, але для інших, хто шукає спосіб генерувати коди для веб-сайтів, які роблять це в чистому javascript, це хороший спосіб це зробити. JQuery-QRCode JQuery плагін робить це добре.


Я вже деякий час використовую плагін Jquery github.com/lrsjng/jquery-qrcode , теж досить. Однак висновок є лише двійковим. Отже, якщо вам потрібно створити та зберегти зображення у форматі PNG, це не надто допоможе. Ось чому більшості розробників, які читають це питання, потрібен PHP.
Kai Noack

Це можна завантажити JS-згенеровані дані зображення 100% в клієнті.
Quinn Comendant

Вибачте за незрозумілість. Я мав на увазі "зберегти сторону сервера" - це неможливо лише з Javascript.
Kai Noack
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.