Boa tarde pessoal alguem poderia me ajudar…
Como faço para pegar um byte que é minha imagem transformar em imagem depois colocar em um arquivo zip para depois ser gravado no HD
tenho o seguinte código abaixo ele gera uma Imagem do meu Byte mais grava no HD…
Obs. imgByte é minha imagem em Byte vinda do banco de dados.
ImageIO.write(ImageIO.read(new ByteArrayInputStream(imgByte)),
"JPG", new File("C:/Douglas/Imagem1.jpg"));
Abaixo meu método que transforma um arquivo em ZIP
public void zip(File[] files, File outputFile) throws IOException {
if (files != null && files.length > 0) {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outputFile));
Stack<File> parentDirs = new Stack<File>();
zipFiles(parentDirs, files, out);
out.close();
}
}
private void zipFiles(Stack<File> parentDirs, File[] files, ZipOutputStream out) throws IOException {
byte[] buf = new byte[1024];
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
//se a entrad é um diretório, empilha o diretório e chama o mesmo método recursivamente
parentDirs.push(files[i]);
zipFiles(parentDirs, files[i].listFiles(), out);
//após processar as entradas do diretório, desempilha
parentDirs.pop();
} else {
FileInputStream in = new FileInputStream(files[i]);
//itera sobre os itens da pilha para montar o caminho completo do arquivo
String path = "";
for(File parentDir : parentDirs) {
path += parentDir.getName() + "/";
}
//grava os dados no arquivo zip
out.putNextEntry(new ZipEntry(path + files[i].getName()));
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
out.closeEntry();
in.close();
}
}
}
Ei, não precisa usar nem ImageIO.read nem ImageIO.write para fazer essa cópia para dentro de um zip. Você pode copiar os bytes diretamente dentro do arquivo .zip.
Procure por ZipOutputStream.
[quote=entanglement]Ei, não precisa usar nem ImageIO.read nem ImageIO.write para fazer essa cópia para dentro de um zip. Você pode copiar os bytes diretamente dentro do arquivo .zip.
Procure por ZipOutputStream. [/quote]
E aii tudo blza cara? Mas então preciso converter primeiro meu Byte para Imagem antes de jogar no ZIP não é? porque como a classe ZipOutputStream vai consegui converter o Byte em imagem, teria algum exemplo? valeu!
Você não deve usar ImageIO.read nem ImageIO.write para pegar um arquivo .png, .jpeg, .pdf, .abobrinha ou .chuchu para gravá-lo em um arquivo .zip.
Usar ImageIO.read e ImageIO.write só serve para perder tempo e gastar memória no seu caso, além de ter um efeito colateral péssimo - digamos que o arquivo original seja .jpeg. Nessa história de usar ImageIO,.read seguido de ImageIO.write, você pode acabar tendo um arquivo completamente diferente do original (por exemplo, perde as informações de resolução, tamanho, GPS e outras coisas que são gravadas no arquivo .jpeg.
Só use ImageIO.read e ImageIO.write se você precisa tratar a imagem.
[quote=entanglement]Você não deve usar ImageIO.read nem ImageIO.write para pegar um arquivo .png, .jpeg, .pdf, .abobrinha ou .chuchu para gravá-lo em um arquivo .zip.
Usar ImageIO.read e ImageIO.write só serve para perder tempo e gastar memória no seu caso, além de ter um efeito colateral péssimo - digamos que o arquivo original seja .jpeg. Nessa história de usar ImageIO,.read seguido de ImageIO.write, você pode acabar tendo um arquivo completamente diferente do original (por exemplo, perde as informações de resolução, tamanho, GPS e outras coisas que são gravadas no arquivo .jpeg.
Só use ImageIO.read e ImageIO.write se você precisa tratar a imagem. [/quote]
Entendi o que quis dizer, mas então você teria algum exemplo ai de como faço para jogar a imagem no zip ela é JPG…
Não importa se o arquivo é uma imagem ou não (e é por isso que eu falei “.pdf”, “.abobrinha” ou “.chuchu”.)
Você usa o mesmo código para botar um arquivo dentro de um zip, não importando se ele é uma imagem, uma música, um vídeo, um PDF ou uma chave para fazer um jailbreak do seu iPhone. OK?
[quote=entanglement]Não importa se o arquivo é uma imagem ou não (e é por isso que eu falei “.pdf”, “.abobrinha” ou “.chuchu”.)
Você usa o mesmo código para botar um arquivo dentro de um zip, não importando se ele é uma imagem, uma música, um vídeo, um PDF ou uma chave para fazer um jailbreak do seu iPhone. OK?
[/quote]
Sim entendi… vc tem algum exemplo para postar ae ?
Amigo, você postou um método “zipFiles” que faz quase o que você quer, mas usa um FileInputStream. Troque o “FileInputStream” por aquele ByteArrayInputStream (mas é claro que você tem de saber o que está fazendo) e você terá o que você quer.
[quote=entanglement]Amigo, você postou um método “zipFiles” que faz quase o que você quer, mas usa um FileInputStream. Troque o “FileInputStream” por aquele ByteArrayInputStream (mas é claro que você tem de saber o que está fazendo) e você terá o que você quer.
[/quote]
Tentei aqui mas nem consegui fazer ainda to no aguardo de uma ajuda :roll:
Dica: pegue seu método “zipFiles”, que converte arquivos para um zip.
Leia o método linha por linha, e tende entendê-lo.
Leia a documentação (javadoc) também. Pegue esse método, debugue-o na sua IDE (Eclipse? NetBeans) e veja o que ele está fazendo.
Depois que você entender esse método, você vai ver que é trivial trocar FileInputStream por ByteArrayInputStream no seu método. OK?
[quote=entanglement]Dica: pegue seu método “zipFiles”, que converte arquivos para um zip.
Leia o método linha por linha, e tende entendê-lo.
Leia a documentação (javadoc) também. Pegue esse método, debugue-o na sua IDE (Eclipse? NetBeans) e veja o que ele está fazendo.
Depois que você entender esse método, você vai ver que é trivial trocar FileInputStream por ByteArrayInputStream no seu método. OK?[/quote]
Ok obrigado pela dica ;D