01: package br.com.gfpshare.testes;
02:
03: import java.awt.image.BufferedImage;
04: import java.io.File;
05: import java.io.FileInputStream;
06: import java.io.FileOutputStream;
07:
08: import com.sun.image.codec.jpeg.JPEGCodec;
09: import com.sun.image.codec.jpeg.JPEGEncodeParam;
10: import com.sun.image.codec.jpeg.JPEGImageDecoder;
11: import com.sun.image.codec.jpeg.JPEGImageEncoder;
12:
13: public class CompactadorDeImagem {
14: private File destino;
15:
16: public CompactadorDeImagem() {
17: destino = null;
18: }
19:
20: public static void main(String args[]) {
21: if ((args == null) | (args.length != 2) | (args[0] == null)) {
22: System.out.println("Parametros invalidos!");
23: return;
24: }
25: File target = new File(args[0]);
26: float qualidade = Float.parseFloat(args[1]);
27: CompactadorDeImagem zip = new CompactadorDeImagem();
28: if (target.isDirectory())
29: zip.compactaDiretorio(target, qualidade);
30: else if (target.isFile()) {
31: zip.compactaImagem(target, qualidade);
32: } else {
33: System.out.println("Parametro invalido!");
34: return;
35: }
36: }
37:
38: public void compactaDiretorio(File diretorio, float qualidade) {
39: File fotos[] = diretorio.listFiles();
40: for (int i = 0; i < fotos.length; i++)
41: if (fotos[i].getName().toLowerCase().endsWith(".jpg")) {
42: System.out.println("Processando foto: " + fotos[i]);
43: compactaImagem(fotos[i], qualidade);
44: } else if (fotos[i].isDirectory()
45: && !fotos[i].getName().equals("Compactadas"))
46: compactaDiretorio(fotos[i], qualidade);
47:
48: }
49:
50: public void compactaImagem(File imagem, float qualidade) {
51: long start = System.currentTimeMillis();
52: String dirDestino = getDestino(imagem);
53: dirDestino = dirDestino + File.separator + imagem.getName();
54: if ((new File(dirDestino)).exists()) {
55: System.out.println("Esta imagem ja foi compactada.");
56: return;
57: }
58: try {
59: FileInputStream fis = new FileInputStream(imagem
60: .getAbsolutePath());
61: JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(fis);
62: BufferedImage origem = decoder.decodeAsBufferedImage();
63: fis.close();
64: BufferedImage img = new BufferedImage(800, 600, 4);
65: img.createGraphics().drawImage(
66: origem.getScaledInstance(800, 600, 4), null, null);
67: FileOutputStream fos = new FileOutputStream(dirDestino);
68: JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(fos);
69: JPEGEncodeParam parm = JPEGCodec
70: .getDefaultJPEGEncodeParam(img);
71: parm.setQuality(qualidade, false);
72: enc.encode(img, parm);
73: fos.flush();
74: fos.close();
75: } catch (Exception e) {
76: System.out.println(e.getMessage());
77: e.printStackTrace();
78: }
79: System.out.println(System.currentTimeMillis() - start);
80: }
81:
82: public String getDestino(File imagem) throws RuntimeException {
83: String path = imagem.getPath().substring(
84: imagem.getPath().indexOf(File.separator),
85: imagem.getPath().lastIndexOf(File.separator));
86: String drive = imagem.getPath().substring(0,
87: imagem.getPath().indexOf(File.separator));
88: destino = new File(drive + File.separator + "FotosCompactadas"
89: + path);
90: destino = destino.exists() ? destino
91: : destino.mkdirs() ? destino : null;
92: if (destino != null)
93: return destino.getAbsolutePath();
94: else
95: throw new RuntimeException(
96: "N\343o foi possivel criar diretorio destino: "
97: + destino);
98: }
99: }
|