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?
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());
}
}
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?
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?