Captura de Fotos

12 respostas
R

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 ?

12 Respostas

leorbarbosa

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!

R

Bom, lendo um pouco achei um tal de JFileChooser mas não encontrei ele no WIndowBuilder.

O que fazer?

leorbarbosa

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.

R

Desculpe não citar, mas estou utilizando GUI (com WindowBuilder).

leorbarbosa

Nunca trabalhei com esta classe, mas ainda acho que File será mais útil para você.

ViniGodoy
  1. Para o usuário escolher a pasta, use um JFileChooser;
  2. Para carregar a imagem do disco, use o comando ImageIO.read:
BufferedImage img = ImageIO.read(arquivo);
  1. Para reduzir o tamanho da imagem, você pode usar o método getResizedImage ou o Graphics;
  2. Para gravar novamente a imagem, use o ImageIO.write.

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).

R

Pois então ViniGodoy, não encontro o JFileChooser no WindowBuilder.

ViniGodoy

O JFileChooser você usa no evento de botão:
http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html

R

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).

R

Consegui. Tópico Resolvido !! :smiley:

ViniGodoy

E cadê a solução?

R

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));
		}
			
	}
Criado 27 de fevereiro de 2013
Ultima resposta 1 de mar. de 2013
Respostas 12
Participantes 3