Bom dia, corrompido ou nulo imagino que não deve estar, pois eu consigo recuperar a imagem do banco de dados e exibi-la dentro do netbeans.
Como você envia a imagem para o banco? Eu utilizo o seguinte método para fazer a conversão da imagem para byte(foi um cara daqui que me passou ele)
private byte[] converterImagem(File file) throws FileNotFoundException, IOException {
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
try {
for (int readNum; (readNum = fis.read(buf)) != -1;) {
bos.write(buf, 0, readNum);
}
} catch (IOException ex) {
ex.printStackTrace();
}
byte[] bytes = bos.toByteArray();
return bytes;
}
bom dia, fiz o teste da seguinte forma:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.nio.file.Files;
@Service
public class ReportByteImage {
@Autowired
private ImageRepository imageRepository;
public void execute() {
try {
byte[] image = Files.readAllBytes(new File("C:\\Users\\villagran\\Downloads\\villagran.jpg").toPath());
imageRepository.save(new ImageTest(1L, image));
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(imageRepository.findById(1L).get().getImage());
BufferedImage bufferedImage = ImageIO.read(byteArrayInputStream);
ImageIcon imageIcon = new ImageIcon(bufferedImage);
System.out.println("teste");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Me passa a classe ImageRepository pra eu ver como fica por favor.
@Vinicius_Costa1
Boa noite, acho que você vai ficar decepcionado, pois para fazer o exemplo rápido e sem muita configuração eu usei spring.
@Repository
public interface ImageRepository extends JpaRepository<Long, ImageTest> {
}
@Villagram
Esses conceitos são avançados pro meu conhecimento, não consegui aplicar seu método no meu código.
@Vinicius_Costa1
Segue exemplo para substituir seu método:
import java.io.File;
import java.nio.file.Files;
public class ReportByteImage {
private byte[] converterImagem(File file) {
try {
return Files.readAllBytes(file.toPath());
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
}
@Villagram
Utilizei este método que você me passou e salvei outra imagem no banco, porém apareceu a mesma situação no iReport

Mesmo assim ainda imagino que seja o método que eu salvo a imagem no banco que pode estar ocasionando este problema
Qual o erro que o console do ireport passa?
Esse é o problema, o console fica em branco
na outra de compilar o relatório da algum erro? você já tentou tirar a imagem e rodar só com os dados?
As vezes você pode estar pensando que é uma coisa e na verdade seja um conjunto de coisas.
Se eu tirar a imagem, o relatório compila normalmente, fica tudo perfeito, ele só da erro quando eu insiro a imagem.
Até criei outro relatório em branco e peguei somente a field de imagem do banco pra fazer o teste, e também da erro.
essas imagens são muito grandes? ou tem algum formato diferente?
Fiz o teste com 2 imagens, ambas são .jpg e possuem em torno de 1MB.
Pesquisei até em fóruns de outras linguas, até tentei fazer de várias outras formas que aparentemente deram certo pra outras pessoas, porém quando eu executo o preview do relatório, aparece aquela mensagem de erro e sem nada no console. Por isso eu imagino que seja a forma como eu estou salvando a imagem no banco.
eu já tive muitos problemas com imagens .jpg pela razão de existir a porra do .jpeg e mesmo se disserem que é mesma coisa, não acredite, essa merda de “e” as vezes faz toda diferença, eu prefiro usar .png ou .gif.
mas olhando seu problema dessa maneira superficial fica difícil saber o que realmente esta acontecendo, pois o erro é para expor o relatório, então imagino eu que está tudo certo, o problema aparentemente é de renderização do preview ou mesmo de uso de memória.
talvez se você rodar o relatório direto da aplicação funcione sem nenhum problema.
Tentei com uma imagem .png e não deu certo também. Complicado cara, não acho solução.
Vou tentar fazer no JasperSoft, se não der certo, vou tentar jogar direto na aplicação java o relatório e ver se funciona. Se não der, vou migrar para o MySQL, pois pelas pesquisas que fiz, pelo jeito lá é mais simples essa ponte entre a imagem e o iReport.
Posteriormente posto os resultados
De qualquer forma, obrigado pela ajuda.
Não acho que o Jasper vai resolver se for problema de relatório visto que o IReport é desenvolvido por eles, também não acho que seja um problema com o banco de dados, como eu disse acho que pode ser um problema de renderização dentro da IDE, rodar direto no sistema é a melhor opção para riscar a possibilidade da lista.
Eu usei o IReport 5.6 com NetBeans 8.2 para rodar o preview.
1 curtida
Rapaz, era isso mesmo, coloquei o relatório na aplicação java e deu certo, o relatório trouxe a imagem normalmente.
Cara muito obrigado pela ajuda, desde o começo então era problema na renderização que o iReport estava fazendo. Fica a sua dica para as pessoas que vierem a enfrentar o mesmo problema.
Só um detalhe, o Jasper pode resolver sim, até pq o iReport tá descontinuado, eu consigo recuperar imagens com aquele trecho de código que passei lá no começo. Vale a pena tentar
1 curtida