Qr-code é um Código de barras 2D. Para quem não faz ideia do que é isso, eu escrevi o post “QR Code, quem não viu, ainda vai ver” para o PHP Mobile. O papo agora é outro, é como vamos gerar um QR-Code dentro da nossa aplicação, como podemos gerar ele dinamicamente, com informações de uma base de dados por exemplo.
Temos um pacote que acabou de sair do forno na PEAR, é o Image_QRCode, ele não só acabou de sair do forno como está estalando de quente, a versão 0.1.1 (alpha) foi lançado no dia 22/04/2010, no mesmo dia em que comecei a escrever esse post.
Baixei essa versão e fiz alguns testes, vou mostrar nesse post como é fácil criar QR-Codes e as várias opções que essa classe nos fornece.
Antes de entrar no código, vale a pena contar o que aconteceu para eu encontrar essa classe, nas pesquisas que fiz, o único código em PHP que tinhamos disponível para geração de qr-code era do Y.Swetake um japonês doido que até ensina no blog dele como fazer os cálculos para gerar a imagem. Só que o código do garoto é um tanto quanto bagunçado e confuso, pensei em dar uma organizada, colocar em uma classe e facilitar a configuração, quando já estava com 40% da nova classe pronta, foi quando tive a feliz ideia de entrar na PEAR, para ver se não tinha algo pronto. E de cara já encontrei, tinha acabado de sair a versão 0.1.1 do pacote Image_QRCode, que faz exatamente o que eu estava tentando,organizar e melhorar o código do nosso amigo japonês.
Instalando
É um pacote PEAR, então você pode instalar rodando o comando pear install Image_QRCode-0.1.1, agora se você boiou sobre essa instalação visite a página no site da PEAR sobre como instalar usando o pear. Eu prefiro fazer o download do pacote todo mesmo, é só entrar na página de download do projeto e baixar o arquivo compactado. Depois de baixar é só descompactar ele e você vai ter a seguinte estrutura:
No diretório data temos os arquivos necessários para geração do QR-code, assim como na pasta image. Em doc temos um arquivo com exemplos práticos e temos até uma pasta com tests, que beleza hein ?
Mas o principal é a classe que está no arquivo QRCode.php e lá que a mágica acontece, sugiro que você edite o arquivo de uma navega por ele para você entender como funciona.
Colocando para funcionar
Na raiz do diretório que você extraiu os arquivos crie um examples.php e coloque o seguinte código:
1 2 3 4 5 6 | <?php require_once("Image/QRCode.php"); $qr = new Image_QRCode(); $qr->makeCode("Oi, eu sou um QR-Code"); ?> |
Agora acesse esse arquivo via browser.
Não funcionou ?
Se apareceu o erro Warning: Cannot modify header information – headers already sent by… verifique se você não deixou espaços em branco antes do inicio do bloco de código PHP, isso pode causar esse erro.
Agora se foi disparado dois Notices antes disso, é um bug já conhecido, que já reportei para o “lead” do pacote na PEAR. Mas enquanto eles não resolvem, é bem simples de arrumar, é só seguir os passos:
<?php // substituir a linha 1129 if ($this->structureappend_n > 1 // por if (isset($this->structureappend_n) && $this->structureappend_n > 1 // substituir a linha 670 if (!is_numeric($this->version)) { // por if (!isset($this->version) || !is_numeric($this->version)) { ?> |
Funcionou
Ou você ta programando sem os Notices habilitados ou o bug já foi corrigido. E você viu a imagem que foi gerado, pronto, ta funcionando.
Mais exemplos
Agora que ta tudo funcionando, vamos explorar a classe. Na própria documentação que vem junto com o pacote, existe uma página com vários exemplos, vou citar alguns aqui para explicar o que temos de opção nessa classe:
Alterando e adicionando opções
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php require_once("Image/QRCode.php"); $options_constructor = array( 'version' => 5, 'path' => '/dir/ate/sua/app/', 'image_path' => '/pasta/com/as/imagens/' ); $qr = new Image_QRCode($options_constructor); $options = array( "module_size" => 10, // tamanho width da imagem a ser gerada "image_type" => 'png', // jpg ou gif "error_correct" => 'L' // L: 7% error level, M: 15% error level, Q: 25% error level. H: 30% error level ); $qr->makeCode("Mostrando os options", $options); ?> |
Se você tentou rodar esse código ele não vai funfar, é apenas didático, para você ver as opções que podemos trabalhar, vou adicionar abaixo um exemplo que você pode por para rodar:
1 2 3 4 5 6 7 8 9 10 11 12 | <?php require_once("Image/QRCode.php"); $qr = new Image_QRCode(); $options = array( "module_size" => 10, "image_type" => 'png' ); $qr->makeCode("Bruno Fernandes \n Desenvolvedor Mobile Web \n tel +556796222213 \n email bruno@porkaria.com.br ", $options); ?> |
Agora é você e sua criatividade para fazer dinheiro com isso!




July 29th, 2010 at 23:22
Obrigado
http://osreformados.com
[Reply]