Bom, precisa capturar todas as fotos .jpg dentro de uma pasta que o usuário passar, reduzir o tamanho das fotos e enviar todas para uma outra pasta.
Alguem pode ajudar ?
Bom, precisa capturar todas as fotos .jpg dentro de uma pasta que o usuário passar, reduzir o tamanho das fotos e enviar todas para uma outra pasta.
Alguem pode ajudar ?
Bom, uma das libs que podem ajudar é a iText para ajustar o tamanho das imagens:
RandomAccessFileOrArray myTiffFile = new RandomAccessFileOrArray("C:/temp/picture.tif");
int numberOfPages = TiffImage.getNumberOfPages(myTiffFile);
// Run a for loop to extract images from Tiff file into a Image object and add to PDF recursively
for(int i=1; i<=numberOfPages; i++) {
Image tempImage = TiffImage.getTiffImage(myTiffFile, i);
tempImage.scalePercent(25); // 25%
}
Para verificar se é pasta ou arquivo use a classe File, e para copiar:
public void copyFile(String origem, String destino) {
InputStream inStream = null;
OutputStream outStream = null;
try {
File afile = new File(origem);
File bfile = new File(destino);
inStream = new FileInputStream(afile);
outStream = new FileOutputStream(bfile);
byte[] buffer = new byte[1024];
int length;
while ((length = inStream.read(buffer)) > 0) { outStream.write(buffer, 0, length); }
inStream.close();
outStream.flush();
outStream.close();
} catch(IOException e){ ... }
}
Flw!
Bom, lendo um pouco achei um tal de JFileChooser mas não encontrei ele no WIndowBuilder.
O que fazer?
A classe é ‘File’ mesmo, por exemplo:
File f = new File("C:/temp");
if (f.isDirectory()) { ... }
Salvo engano, ‘JFileChooser’ é indicada para aplicações GUI. Não é o caso, pelo menos você não citou.
Desculpe não citar, mas estou utilizando GUI (com WindowBuilder).
Nunca trabalhei com esta classe, mas ainda acho que File será mais útil para você.
BufferedImage img = ImageIO.read(arquivo);
O WindowBuilder é só um editor de janelas (assim como o Word é um editor de texto). Precisamos saber é se você usa com Swing, AWT ou SWT (se suas classes de janela começam com J, é Swing).
Pois então ViniGodoy, não encontro o JFileChooser no WindowBuilder.
O JFileChooser você usa no evento de botão:
http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html
Bom já entendi o funcionamento do JFileChooser, porém não achei como selecionar todos os arquivos dentro de uma pasta (já sei que devo usa o DIRECTORY_ONLY).
Consegui. Tópico Resolvido !!
E cadê a solução?
Bom, então vamos a solução.
1- configuro o JFileChooser:
//Configuramos o JFileChooser
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
2- Seleciono o destino das fotos:
//Selecionamos o destino das fotos
btnDestino = new JButton("Sel. Destino");
btnDestino.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
selectDestinyOfImages();
}
});
private void selectDestinyOfImages(){
int returnVal = fc.showOpenDialog(contentPane);
if (returnVal == fc.APPROVE_OPTION){
File dir = fc.getSelectedFile();
destiny_directory = dir.getAbsolutePath();
lblDestino.setText(destiny_directory);
}
}
3 - Seleciono a origem das imagens
//Selecionamos a origem das fotos
JButton btnOrigem = new JButton("Sel. Origem");
btnOrigem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
takeImagesFromSource();
}
});
private void takeImagesFromSource(){
int returnVal = fc.showOpenDialog(contentPane);
if (returnVal == fc.APPROVE_OPTION){
File dir = fc.getSelectedFile();
source_directory = dir.getAbsolutePath();
lblOrigem.setText(source_directory);
//Captura todas as imagens em JPG dentro da pasta srcdir
lista_de_fotos = dir.listFiles(new java.io.FileFilter() {
@Override
public boolean accept(File f) {
String nome = f.getName().toLowerCase();
return nome.endsWith("jpg") || nome.endsWith("bmp");
}
});
}else
System.out.println("Ação Cancelada pelo Usuário");
}
4 - Redimensiono as imagens
btnRedimensionar = new JButton("Redimensionar");
btnRedimensionar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
ResizeImageAndSave();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
private void ResizeImageAndSave() throws IOException{
int qtd_fotos = lista_de_fotos.length;
for (int i=0;i<qtd_fotos;i++){
//Caminho absoluto da imagem origem e imagem destino
String full_source_image = source_directory+"\\"+lista_de_fotos[i].getName();
String full_destiny_image = destiny_directory+"\\"+lista_de_fotos[i].getName();
//Se o diretorio destino nao existe criaremos ele
File check_dir = new File(destiny_directory);
if (!check_dir.exists())
check_dir.mkdir();
int new_w = 800, new_h = 600;
BufferedImage old_image = ImageIO.read(new File(full_source_image));
BufferedImage new_image = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB);
Graphics2D g = new_image.createGraphics();
g.drawImage(old_image, 0, 0, new_w, new_h, null);
//Grava imagem no novo caminho
ImageIO.write(new_image, "JPG", new File(full_destiny_image));
}
}