:uk: Also available in English :uk:

QRCode Kotlin Logo

Criar QRCodes em Kotlin (e Java) é mais difícil do que deveria ser. A QRCode-Kotlin tenta trazer uma forma personalizável, simples e direta de se criar QRCodes, especialmente no backend.

É com esta missão em mente que continuamos a fazer o nosso melhor para aprender como pessoas desenvolvedoras utilizam essa biblioteca nos seus projetos e quais os seus objetivos, para podermos prover uma ferramenta/API melhor para todos. Por favor, sinta-se livre para compartilhar se e como você utiliza este projeto ^^

Sumário

Instalação

A biblioteca está disponível através da Maven Central e do NPM JS, portanto basta adicioná-la a seu projeto como qualquer outra:

Gradle:

// Use esse tanto para Android quanto para a JVM
implementation("io.github.g0dkar:qrcode-kotlin:4.1.1")

Maven - JVM:

<dependency>
    <groupId>io.github.g0dkar</groupId>
    <artifactId>qrcode-kotlin-jvm</artifactId>
    <version>4.1.1</version>
</dependency>

Maven - Android:

<dependency>
    <groupId>io.github.g0dkar</groupId>
    <artifactId>qrcode-kotlin-android</artifactId>
    <version>4.1.1</version>
</dependency>

NodeJS:

npm install qrcode-kotlin@4.1.1

Browser:

<script src="https://cdn.jsdelivr.net/gh/g0dkar/qrcode-kotlin@main/release/qrcode-kotlin.min.js" type="application/javascript"></script>

Uso

Para criar QRCodes, a principal classe que deve ser usada é a qrcode.render.QRCode. Ela tem métodos estáticos para ajudar na criação de um QRCode da forma que você quiser:

// Use qualquer um desses:

val quadrados = QRCode.ofSquares()

val circulos = QRCode.ofCircles()

val quadradosArredondados = QRCode.ofRoundedSquares()

Com isso, você terá uma instância de QRCodeBuilder. Esta classe tem métodos para ajustar cores, tamanho, espaçamento, adicionar um logo e mais! Certifique-se de ver também a classe Colors.

Aqui tem um código para ajudar você a começar:

val helloWorld = QRCode.ofSquares()
    .withColor(Colors.DEEP_SKY_BLUE) // Padrão é Colors.BLACK
    .withSize(10) // Padrão é 25px
    .build("Hello world!")

// Por padrão, os QRCodes serão gerados como PNG
val pngBytes = helloWorld.render()

FileOutputStream("hello-world.png").use { it.write(pngBytes) }

Recomendamos fortemente que você veja os exemplos disponíveis:

Os exemplos mostram praticamente tudo que pode ser feito com a biblioteca! Até mesmo como estender a mesma para criar QRCodes em SVG ;)

Você pode utilizar todas essas funcionalidades juntas e misturadas. Tente gerar o logo e banner com gradientes e tudo mais em SVG ;)

Spring Framework e/ou Spring Boot

Como dito anteriormente, uma das razões principais para o desenvolvimento dessa biblioteca foi para ser usada em aplicações backend. Portanto, é natural mostrar como fazer exatamente isso :)

Este método de um controller do Spring Framework/Boot mostra como gerar QRCodes dado o conteúdo do mesmo:

import org.springframework.core.io.ByteArrayResource
import org.springframework.http.HttpHeaders.CONTENT_DISPOSITION
import org.springframework.http.MediaType.IMAGE_PNG_VALUE

@GetMapping("/qrcode")
fun generateQrCode(content: String): ResponseEntity<ByteArrayResource> {
    val pngData = QRCode().ofSquares()
        .build(content)
        .render()
    val resource = ByteArrayResource(pngData, IMAGE_PNG_VALUE)

    return ResponseEntity.ok()
        .header(CONTENT_DISPOSITION, "attachment; filename=\"qrcode.png\"")
        .body(resource)
}

Mudanças da v3

As principais mudanças vindo da versão v3.3.0 são:

  1. O pacote principal das classes foi mudado de io.github.g0dkar.qrcode para simplesmente qrcode
    • O nome anterior não ajuda linguagens que não têm esse conceito de “pacote”, e outras bibliotecas Kotlin já nomeiam os seus pacotes principais dessa forma.
  2. A antiga classe QRCode foi reescrita para ser mais fácil de se criar QRCodes mais bonitos. A antiga classe QRCode foi renomeada para QRCodeProcessor, com pouquíssimas mudanças na API.
    • Para a maioria dos casos de uso simples, a nova QRCode é compatível com a antiga!
  3. Uma grande quantidade de otimizações em como o QRCode é desenhado. Anteriormente, tínhamos um canvas (ecrã) para cada quadrado, o qual era copiado no canvas do QRCode principal. Isto foi mudado para termos apenas um grande canvas onde cada quadrado individual será desenhado diretamente.
  4. Suporte a iOS e tvOS: A partir da versão v4.0.7, uma implementação experimental inicial da classe QRCodeGraphics foi criada para que o iOS e tvOS sejam suportados. Todo e qualquer feedback é muito bem-vindo! (pode comentar em português mesmo) - Um imenso agradecimento a ruicanas por suas contribuições a essa feature :D

Licença

Copyright desde 2021 Rafael M. Lins, Licenciado sob a Licença MIT.

QR Code é marca registrada de Denso Wave, Inc.

Agradecimentos e Reconhecimentos

Se você gostou da biblioteca e quiser ajudar pagando um cafézinho, use os botões abaixo :love_you_gesture:

Me pague um cafézinho via Ko-fi!

Me pague um cafézinho via PayPal!