GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Exibir o QRCode na tela na aplicação web

programação
java
Tags: #<Tag:0x00007f6106f4fab0> #<Tag:0x00007f6106f4f8a8>
#1

Olá

Tenho esse código que gera o QRCode da biblioteca Zxing.

 private static byte[] getQRCodeImage(String text, int width, int height) throws WriterException, IOException {
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);

        ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream();
        MatrixToImageWriter.writeToStream(bitMatrix, "PNG", pngOutputStream);
        byte[] pngData = pngOutputStream.toByteArray();
        return pngData;
    }

Ele esta retornando um array de bytes.

Estou fazendo uma aplicação web.

Como faço para exibir esse array como imagem na tela?

0 Likes

#2

Você pode gerar um arquivo de imagem a partir desse byte e exibir essa imagem gerada na tela.

Método que cria o arquivo imagem a partir de um array de bytes:

public static final String NOME_ARQUIVO_PADRAO = "minha_imagem.png";

private File criarImagemDeArrayBytes(byte[] arrayBytesImagem) {
    try {
        ByteArrayInputStream arrayDeBytes = new ByteArrayInputStream(arrayBytesImagem);
        BufferedImage imagemResultado = ImageIO.read(arrayDeBytes);
        File arquivoImagem = new File(NOME_ARQUIVO_PADRAO);
        ImageIO.write(imagemResultado, "png", arquivoImagem);
        return arquivoImagem;
    } catch (Exception e) {
        throw new RuntimeException("Não foi possível criar uma imagem a partir do array de bytes: " + e.getMessage());
    }
}
0 Likes

#3

Olá tentei usar seu código mas não consegui… coloquei assim para exibir na tela

<p:graphicImage id=“qrcode” library=“imagens” name="#{testesBean.arquivoImagem}" />
Mas da erro:

Advertência: JSF1091: Nenhum tipo de mime pôde ser encontrado para o arquivo . Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.
Grave: Error Rendering View[/paginas/testes/testes.xhtml]
java.io.IOException: java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at org.primefaces.component.graphicimage.GraphicImageRenderer.encodeEnd(GraphicImageRenderer.java:44)

Como tenho que exibir esse arquivo gerado?

0 Likes

#4

Desculpa, eu não entendo muito de JSF. O método que te passei apenas cria um arquivo para a imagem. Pensei que era só isso que precisava.

Mas o método cria a imagem sem problemas?

0 Likes