style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Java Zone Comic Book

Java Zone Comic Book

Si tienes un PSP o un nintendo DS esto te interesara, con este programa podras transformar tus imagenes en imagenes con el formato para estos dispositivos y podras verlas en ellos. Ademas el programa genera un html para que se puedan visualizar las imagenes, solo se da clic sobre la imagen y muestra la siguiente.

Clase Principal

package clases;

import javax.swing.JButton;
import javax.swing.table.DefaultTableCellRenderer;

public class Principal extends javax.swing.JFrame {

 public JButton btnAccion;
 public javax.swing.table.DefaultTableModel modelo;
 public javax.swing.JTable tLista;
 private javax.swing.table.JTableHeader cLista;
 private HiloProceso proceso;
 private javax.swing.JScrollPane scroll;

 final javax.swing.JComboBox cBox = new javax.swing.JComboBox(new javax.swing.ImageIcon[]
                      { new javax.swing.ImageIcon(getClass().getResource("/otros/ds_logo.png")) ,
                 new javax.swing.ImageIcon(getClass().getResource("/otros/psp_logo.png")),
                 new javax.swing.ImageIcon(getClass().getResource("/otros/favIcon.png")) });
 
 public Principal() {
  javax.swing.JPanel pPal = new javax.swing.JPanel();
 
  modelo = new javax.swing.table.DefaultTableModel(){
   
   public Class getColumnClass(int columnIndex) {
    if (columnIndex == modelo.findColumn("En Linea") || columnIndex == modelo.findColumn("Manga")) {
     return Boolean.class;
    } else {
     if (columnIndex == modelo.findColumn("Paquete")) {
      return javax.swing.ImageIcon.class;
     } else {
      if (columnIndex == modelo.findColumn("Origen")) {
       return java.util.Vector.class;
      } return super.getColumnClass(columnIndex);
     }
    }
   }
   
   public java.util.Vector getDataVector() {
    java.util.Vector vector = new java.util.Vector();
    vector.addElement(true);
    vector.addElement(true);
    vector.addElement((javax.swing.ImageIcon)cBox.getSelectedItem());
    vector.addElement(new java.util.Vector());
    vector.addElement("");
    vector.addElement("");
    vector.addElement("");
    return vector;
   }
   
  };
 
  modelo.setColumnIdentifiers(new String[] {"En Linea", "Manga", "Paquete", "Origen", "Titulo", "Autor", "Estado"});
  modelo.addRow( modelo.getDataVector() );
 
  tLista = new javax.swing.JTable(modelo) {
   @Override
   public boolean isCellEditable(int row, int column) {
    if(tLista.getValueAt(row, modelo.findColumn("Estado")).toString().startsWith("Pag") ||
       column == modelo.findColumn("Origen") || column == modelo.findColumn("Estado")) {
     return false;
    }  return true;
   }
  };
 
  tLista.addKeyListener(new java.awt.event.KeyAdapter() {
   @Override
   public void keyPressed(java.awt.event.KeyEvent e) {
    try {
     if(e.getKeyCode() == java.awt.event.KeyEvent.VK_INSERT) {  //nuevo.
      modelo.addRow(modelo.getDataVector());
     } else {
      if(e.getKeyCode() == java.awt.event.KeyEvent.VK_DELETE) { //eliminar.
       do {
        modelo.removeRow(tLista.getSelectedRow());
       } while(tLista.getSelectedRowCount() != 0);
      }
     }
    } catch (Exception exception) {}
   }
  });
 
  (tLista.getColumnModel().getColumn(modelo.findColumn("Paquete"))).setCellEditor(new javax.swing.DefaultCellEditor(cBox));

 DefaultTableCellRenderer renderer =  new DefaultTableCellRenderer();
 renderer.setToolTipText("Click for combo box");
 tLista.getColumnModel().getColumn(modelo.findColumn("Estado")).setCellRenderer(renderer);
 
  tLista.addMouseListener(new java.awt.event.MouseAdapter() {
   @Override
   public void mousePressed(java.awt.event.MouseEvent e) {
    if (e.getClickCount() == 2 && !tLista.getValueAt(tLista.getSelectedRow(), modelo.findColumn("Estado")).toString().startsWith("Pag")) {
     if(tLista.getSelectedColumn() == modelo.findColumn("Origen")) {
      new Fuente(tLista.getValueAt(tLista.getSelectedRow(),
              modelo.findColumn("En Linea")).equals(true),
              tLista.getSelectedRow(), modelo);
     } else {
     if (tLista.getSelectedColumn() == modelo.findColumn("Estado")
      && !tLista.getValueAt(tLista.getSelectedRow(),modelo.findColumn("Origen")).toString().equalsIgnoreCase("")) {
      tLista.setValueAt(tLista.getValueAt(tLista.getSelectedRow(),
            tLista.getSelectedColumn()).equals("Tratar")?"Ignorar":"Tratar",
            tLista.getSelectedRow(), tLista.getSelectedColumn());
     }
     }
    }
   }
  });/**/
  tLista.getColumnModel().getColumn(0).setPreferredWidth(5);
  tLista.getColumnModel().getColumn(1).setPreferredWidth(5);
  tLista.getColumnModel().getColumn(2).setPreferredWidth(5);
 
  cLista = tLista.getTableHeader();
  cLista.addMouseListener(new java.awt.event.MouseAdapter() {
   @Override
   public void mouseClicked(java.awt.event.MouseEvent e) {
    if(e.getClickCount() == 2 && cLista.getCursor().getType() == java.awt.Cursor.E_RESIZE_CURSOR) {
     int i = cLista.columnAtPoint(Principal.this.getMousePosition())-1 == -2
          ? modelo.getColumnCount()-1
          : cLista.columnAtPoint(Principal.this.getMousePosition())-1;
     javax.swing.table.TableColumn col = cLista.getColumnModel().getColumn(i);
     int width = getFontMetrics(getFont()).stringWidth(col.getIdentifier().toString());

     for(int j = 0; j < tLista.getRowCount();j++) {
      int aux = getFontMetrics(getFont()).stringWidth(tLista.getValueAt(j, i).toString());
      if(aux > width) width = aux;
     }  col.setPreferredWidth(width);
    } super.mouseClicked(e);
   }
  });
 
  scroll = new javax.swing.JScrollPane(tLista);
  scroll.setPreferredSize(new java.awt.Dimension(800, 225));
  pPal.add(scroll);
 
  btnAccion = new JButton( "Iniciar Proceso de Transformación" );
  btnAccion.addMouseListener(new java.awt.event.MouseAdapter() {
   @Override
   public void mouseClicked(java.awt.event.MouseEvent e) {
    if (!btnAccion.getText().equals("Cancelar")) {
     proceso = new HiloProceso( Principal.this );
    } else {
     proceso.cancelar();
    }
   }
  }); btnAccion.setPreferredSize(new java.awt.Dimension(800, 23));
  pPal.add(btnAccion); add(pPal);  
 }
 
 @Override
 public void paint(java.awt.Graphics g) {
  scroll.setPreferredSize(new java.awt.Dimension(this.getWidth() - 30,this.getHeight() - 75));
  btnAccion.setPreferredSize(new java.awt.Dimension(this.getWidth() - 30, 23));
  super.paint(g);
 }

 public static void main(String[] args) {
  Principal ui = new Principal();  
  ui.setTitle("CONY 1.5 - JComicBook formato - Java Zone");
  ui.setIconImage(java.awt.Toolkit.getDefaultToolkit().getImage(ui.getClass().getResource("/otros/manga.png")));
  ui.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
  ui.setLocationByPlatform(true);
  ui.setSize(830, 300); ui.setVisible(true);
 }
}

Clase HiloProceso

package clases;

import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import javax.imageio.ImageIO;

public class HiloProceso extends Thread {

 private static java.net.URL url = null;
 private static File[] dir = null;
 private static FileInputStream fis;
 private static byte[] buffer = new byte[1024];
 private static int leido, indice, nrPag, i = 0;
 
 boolean finalizado, extraer;  
 Principal principal;   javax.swing.table.DefaultTableModel modelo;
 static String TEMPORAL = System.getProperty("java.io.tmpdir")+"tmpCony\\";
 static String DESTINO = System.getProperty("user.dir")+"\\";
 ZipOutputStream comicBook;  String formato, proveedor;
 
 public HiloProceso(Principal principal) {
  try { System.out.println(TEMPORAL);
   this.modelo = principal.modelo; this.principal = principal;
   principal.btnAccion.setText("Cancelar");
   finalizado = false;  indice = 0;  start();
  }catch (Exception e) { e.printStackTrace();
   System.out.println(e.getMessage());
  }
 }

 public void cancelar() {
  finalizado = true;
 }
 
 @Override
 public void run() {
  while( finalizado == false && indice < modelo.getRowCount()) {
   if (("Tratar").equalsIgnoreCase(modelo.getValueAt(indice, modelo.findColumn("Estado")).toString())) {
    if (modelo.getValueAt(indice, modelo.findColumn("Titulo")).toString().equalsIgnoreCase("")) {
     modelo.setValueAt("Sin Nombre", indice, modelo.findColumn("Titulo"));
    } if (modelo.getValueAt(indice, modelo.findColumn("Autor")).toString().equalsIgnoreCase("")) {
     modelo.setValueAt("D.R.A.", indice, modelo.findColumn("Autor"));
    } (new File(TEMPORAL+modelo.getValueAt(indice, modelo.findColumn("Titulo"))+"\\")).mkdirs();
   
    for(i = 0; i < principal.cBox.getItemCount();i++) {
     if (principal.cBox.getItemAt(i) == (((javax.swing.ImageIcon)modelo.getValueAt(indice, modelo.findColumn("Paquete"))))) {
      if(i == 0) {    formato = ".cbds";
      } else {
       if (i == 1) {   formato = ".cbz";
       } else {    formato = ".zip";
       }
      } break;
     }
    }
       
    extraer = archivoComicBook(modelo.getValueAt(indice, modelo.findColumn("Titulo")).toString());
    if (extraer == true) {
     if (modelo.getValueAt(indice, modelo.findColumn("Estado")).toString().startsWith("Pag"))
     modelo.setValueAt("-- "+(nrPag - 1)+" Pgs. --", indice, modelo.findColumn("Estado"));
    }
   } indice++;
  } borrarTmp(new File(TEMPORAL));
  principal.btnAccion.setText("Iniciar Proceso de Transformacion");
 }

 private boolean archivoComicBook(String nombre) {
  try { nrPag = 1; i = 0; BufferedImage buffy = null;
   
   java.util.Enumeration dirs = ((java.util.Vector)(modelo.getValueAt(indice, modelo.findColumn("Origen")))).elements();
   String origen = dirs.nextElement().toString();
   
   if((modelo.getValueAt(indice, modelo.findColumn("En Linea")).equals(false))) {
    dir = (new File(origen)).listFiles(); proveedor = System.getProperty("user.name");
   } modelo.setValueAt("Pag "+nrPag,indice, modelo.findColumn("Estado"));
     
   comicBook = new ZipOutputStream(new FileOutputStream(DESTINO + nombre +formato));
   comicBook.setLevel(java.util.zip.Deflater.NO_COMPRESSION);
   
   while(!finalizado) {
    try {
     if((modelo.getValueAt(indice, modelo.findColumn("En Linea")).equals(true))){
      if (!origen.contains("[%i]") && i == 1) {   break;
      } else {
       url = new java.net.URL(origen.replace("[%i]", ""+((i == 0)?"":(i-1))));
      } buffy = ImageIO.read(url); proveedor = url.getHost(); i++;
     } else {
      if( dir[i].getName().toLowerCase().endsWith(".jpeg")
         || dir[i].getName().toLowerCase().endsWith(".jpg")
         || dir[i].getName().toLowerCase().endsWith(".png")
         || dir[i].getName().toLowerCase().endsWith(".bmp")) {
       buffy = ImageIO.read(dir[i]); i++;
      } else { i++; continue; }
     }
     
    } catch (javax.imageio.IIOException e) {
     if (i > 1) { i = 0;
      try {
       origen = dirs.nextElement().toString();  
      } catch (java.util.NoSuchElementException nse) {
       break;
      }
     } else {
      i++; continue;
     }  
    } catch(java.lang.ArrayIndexOutOfBoundsException e) {        break;
    } catch (java.lang.NullPointerException e) {
     modelo.setValueAt("Fuente no hallada", indice, modelo.findColumn("Estado")); break;
    } catch (java.net.MalformedURLException e) {
     modelo.setValueAt("Fuente no alcanzada", indice, modelo.findColumn("Estado")); break;
    } catch (final Exception e) {
     modelo.setValueAt(e.getClass().getName(), indice, modelo.findColumn("Estado"));
     System.out.println(e.getClass().getName() +" "+e.getMessage());     break;
    } modelo.setValueAt("Pag "+nrPag,indice, modelo.findColumn("Estado"));
   
    if (formato.equalsIgnoreCase(".cbds")) {
     comicBook.putNextEntry(new ZipEntry("NAME/"+nrPag+".txt"));
     File txtNombre = new File(TEMPORAL + nombre +"/book.txt");
     FileOutputStream contenido = new FileOutputStream(txtNombre);
     contenido.write((nombre + " - " + nrPag).getBytes());
     contenido.close();
     
     fis = new FileInputStream(txtNombre); leido = 0;
     while( 0 < (leido = fis.read(buffer)) ) {
     comicBook.write(buffer, 0, leido);
     } fis.close(); comicBook.closeEntry();
     
     comicBook.putNextEntry(new ZipEntry("IMAGE/"+nrPag+".png"));
        dimensionarImagen(buffy, TEMPORAL + nombre +"/image.png", false, 700, 1400, 860000);
        fis = new FileInputStream(new File(TEMPORAL + nombre +"/image.png")); leido = 0;
     while( 0 < (leido = fis.read(buffer)) ) {
     comicBook.write(buffer, 0, leido);
     } fis.close(); comicBook.closeEntry();
     
     comicBook.putNextEntry(new ZipEntry("SMALL_N/"+nrPag+".png"));
        dimensionarImagen(buffy, TEMPORAL + nombre +"/image.png", false, 256, 192, 0);
        fis = new FileInputStream(new File(TEMPORAL + nombre +"/image.png")); leido = 0;
     while( 0 < (leido = fis.read(buffer)) ) {
     comicBook.write(buffer, 0, leido);
     } fis.close(); comicBook.closeEntry();
     
        comicBook.putNextEntry(new ZipEntry("SMALL_R/"+nrPag+".png"));
        dimensionarImagen(buffy, TEMPORAL + nombre +"/image.png", true, 256, 192, 0);
        fis = new FileInputStream(new File(TEMPORAL + nombre +"/image.png")); leido = 0;
     while( 0 < (leido = fis.read(buffer)) ) {
     comicBook.write(buffer, 0, leido);
     } fis.close(); comicBook.closeEntry();
     
        comicBook.putNextEntry(new ZipEntry("THMB_N/"+nrPag+".png"));
        dimensionarImagen(buffy, TEMPORAL + nombre +"/image.png", false, 62, 46, 0);
        fis = new FileInputStream(new File(TEMPORAL + nombre +"/image.png")); leido = 0;
     while( 0 < (leido = fis.read(buffer)) ) {
     comicBook.write(buffer, 0, leido);
     } fis.close(); comicBook.closeEntry();
     
        comicBook.putNextEntry(new ZipEntry("THMB_R/"+nrPag+".png"));
        dimensionarImagen(buffy, TEMPORAL + nombre +"/image.png", true, 62, 46, 0);
        fis = new FileInputStream(new File(TEMPORAL + nombre +"/image.png")); leido = 0;
     while( 0 < (leido = fis.read(buffer)) ) {
     comicBook.write(buffer, 0, leido);
     } fis.close(); comicBook.closeEntry();
     
    } else {
     if (formato.equalsIgnoreCase(".cbz")) {
      comicBook.putNextEntry(new ZipEntry(nombre + " - " +nrPag+".png"));
         dimensionarImagen(buffy, TEMPORAL + nombre +"/image.png", false, 700, 1400, 860000);
         fis = new FileInputStream(new File(TEMPORAL + nombre +"/image.png")); leido = 0;
      while( 0 < (leido = fis.read(buffer)) ) {
      comicBook.write(buffer, 0, leido);
      } fis.close(); comicBook.closeEntry();
     } else {
      comicBook.putNextEntry(new ZipEntry("imagenes/" + nombre + " - " +nrPag+".png"));
         dimensionarImagen(buffy, TEMPORAL + nombre +"/image.png", false, 0, 0, 0);
         fis = new FileInputStream(new File(TEMPORAL + nombre +"/image.png")); leido = 0;
      while( 0 < (leido = fis.read(buffer)) ) {
      comicBook.write(buffer, 0, leido);
      } fis.close(); comicBook.closeEntry();
     }
    } nrPag++;
   }
   
   if(formato.equalsIgnoreCase(".cbds")) {
    comicBook.putNextEntry(new ZipEntry("ComicBookDS_book.ini"));
    fis = new FileInputStream(archivoIni(nombre, true));
   } else {
    if(formato.equalsIgnoreCase(".cbz")) {
     comicBook.putNextEntry(new ZipEntry("ComicBookZip_book.txt"));
     fis = new FileInputStream(archivoIni(nombre, false));
    } else {
     comicBook.putNextEntry(new ZipEntry("ComicBook_index.html"));
     fis = new FileInputStream(archivoIni(nombre));
    }
   } leido = 0;
   
   while( 0 < (leido = fis.read(buffer)) ) {
   comicBook.write(buffer, 0, leido);
   } fis.close(); comicBook.closeEntry();  comicBook.close();
   
  } catch (java.util.NoSuchElementException e) {
   modelo.setValueAt("Ruta no Valida", indice, modelo.findColumn("Estado")); return false;
  } catch (Exception e) {  e.printStackTrace();
   modelo.setValueAt(e.getClass().getName(), indice, modelo.findColumn("Estado")); return false;
  } return true;
 }

 private File archivoIni(String nombre, boolean isDS) {
  try { File fIni = new File(TEMPORAL + nombre + "/book.txt");
   java.io.FileOutputStream ini = new java.io.FileOutputStream(fIni);
 
   ini.write(("CbCredits1 = " + modelo.getValueAt(indice, modelo.findColumn("Titulo")) + "; --Titulo--\r\n").getBytes());
   ini.write(("CbCredits2 = " + modelo.getValueAt(indice, modelo.findColumn("Autor")) + "; --Autor--\r\n").getBytes());
   ini.write(("CbCredits3 = " + proveedor + "; --Proveedor--\r\n").getBytes());
   ini.write((("LeftToRight = " + (modelo.getValueAt(indice, modelo.findColumn("Manga")).equals(false)
       ?"1; --No" : "0; --Si")) + " es lectura Manga--\r\n").getBytes());
   ini.write(("NbPages = " + (nrPag - 1) + "\r\n").getBytes());
   ini.write("Version = 1.5\r\n".getBytes());
   ini.write(("iHeight = " + 1400 + "\r\n").getBytes());
   ini.write(("iQuality = " + 90 + "\r\n").getBytes());
   ini.write(("iSize = " + 860000 + "\r\n").getBytes());
   ini.write(("iWidth = " + 700 + "\r\n").getBytes());

   if (isDS) {
    ini.write(("oHeight = " + 192 + "\r\n").getBytes());
    ini.write(("oQuality = " + 90 + "\r\n").getBytes());
    ini.write(("oSize = " + 0 + "\r\n").getBytes());
    ini.write(("oWidth = " + 256 + "\r\n").getBytes());
    ini.write(("thHeight = " + 46 + "\r\n").getBytes());
    ini.write(("thQuality = " + 90 + "\r\n").getBytes());
    ini.write(("thSize = " + 0 + "\r\n").getBytes());
    ini.write(("thWidth = " + 62 + "\r\n").getBytes());
   } ini.close(); return fIni;
   
  } catch (Exception e) {
   e.printStackTrace(); return null;
  }
 }

 private File archivoIni(String nombre) {
  try { File fIni = new File(TEMPORAL + nombre + "/book.html");
   java.io.FileOutputStream ini = new java.io.FileOutputStream(fIni);
   
   ini.write(("<!DOCTYPE HTML>\r\n<HTML>"+ "\r\n").getBytes());
   ini.write((" <HEAD>"+ "\r\n").getBytes());
   ini.write(("  <TITLE>Browser &mdash; "+modelo.getValueAt(indice, modelo.findColumn("Titulo"))
       +" &mdash; Cony 1.5</TITLE>"+ "\r\n\r\n").getBytes());
   
   ini.write(("  <script type=\"text/javascript\">   var nroPag = 1;"+ "\r\n\r\n").getBytes());
   ini.write(("   document.onkeydown = (function(evt) {"+ "\r\n").getBytes());
   ini.write(("     if(evt.keyCode == 37) {       moverImagen(-1);"+ "\r\n").getBytes());
   ini.write(("     } else {"+ "\r\n").getBytes());
   ini.write(("       if(evt.keyCode == 39) {     moverImagen(1); }"+ "\r\n").getBytes());
   ini.write(("     }"+ "\r\n").getBytes());
   ini.write(("   });"+ "\r\n\r\n").getBytes());

   ini.write(("   function moverImagen(mov) {"+ "\r\n").getBytes());
   ini.write(("     if (((nroPag + mov) > 0) && ((nroPag + mov) < "+nrPag+")) {"+ "\r\n").getBytes());
   ini.write(("       nroPag = nroPag + mov;"+ "\r\n").getBytes());
   ini.write(("       document.getElementById('imagen').src =" +
          "\"imagenes/"+modelo.getValueAt(indice, modelo.findColumn("Titulo"))+" - \"+nroPag+\".png\";"+ "\r\n").getBytes());
   ini.write(("       window.scrollTo(0,0);"+ "\r\n").getBytes()); //vuelve arriba
   ini.write(("     }"+ "\r\n").getBytes());
   ini.write(("   }"+ "\r\n\r\n").getBytes());
   ini.write(("  </script>"+ "\r\n").getBytes());

   ini.write((" </HEAD>"+ "\r\n").getBytes());
   ini.write((" <BODY align =\"center\""+ "\r\n").getBytes());
   ini.write(("       style=\"background-color: black;"+ "\r\n").getBytes());
   ini.write(("              background-attachment: fixed;"+ "\r\n").getBytes());
   ini.write(("              background-repeat:no-repeat;\">"+ "\r\n\r\n").getBytes());

   ini.write(("  <h3 style=\"color:white;\">"
      + modelo.getValueAt(indice, modelo.findColumn("Titulo")) +"</h3>\r\n\r\n").getBytes());
   
   ini.write(("  <img id=\"imagen\" onclick=\"moverImagen(1);\""
      + " src=\"imagenes/" +modelo.getValueAt(indice, modelo.findColumn("Titulo"))+" - 1.png\" />"+ "\r\n\r\n").getBytes());

   ini.write(("  <h6 style=\"color:white;\">"+ (nrPag - 1) +" pags \r\n").getBytes());  
   ini.write(("      &mdash; "+ modelo.getValueAt(indice, modelo.findColumn("Autor")) +"\r\n").getBytes());
   ini.write(("      &mdash; "+ proveedor +"</h6> \r\n\r\n").getBytes());
   
   ini.write((" </BODY>"+ "\r\n").getBytes());
   ini.write(("</HTML>"+ "\r\n").getBytes());
   ini.close(); return fIni;
   
  } catch (Exception e) {
   e.printStackTrace(); return null;
  }
 }
 
 private void dimensionarImagen(BufferedImage buffy, String nombre, boolean rotar,
          int width, int height, int maxsize)
         throws java.io.IOException {
  BufferedImage imagen;  java.awt.Image img;
 
  if((buffy.getWidth() > width || buffy.getHeight() > height) && (width != 0 && height != 0)) {
   if((buffy.getWidth()/width) > (buffy.getHeight()/height)) {
    width = buffy.getWidth()/(buffy.getWidth()/width);
    height = buffy.getHeight()/(buffy.getWidth()/width);
   } else {
    width = buffy.getWidth()/(buffy.getHeight()/height);
    height = buffy.getHeight()/(buffy.getHeight()/height);
   }
  } else {
   width = buffy.getWidth();
   height = buffy.getHeight();
  }
 
  if (maxsize != 0 && width * height > maxsize) {
   double sqrt = Math.sqrt(((double) maxsize)/((double)(buffy.getWidth() * buffy.getHeight())));
   width = (int) (((double) width) * sqrt);
   height = (int) (((double) height) * sqrt);
  }
 
  if (width != buffy.getWidth() || height != buffy.getHeight()) {
   img = buffy.getScaledInstance(width, height, java.awt.Image.SCALE_AREA_AVERAGING);
  } else {
   img = buffy.getSubimage(0, 0, width, height);
  }
 
  imagen = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  ((java.awt.Graphics2D) imagen.getGraphics()).setRenderingHint(
    RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
  ((java.awt.Graphics2D) imagen.getGraphics()).setRenderingHint(
    RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
  ((java.awt.Graphics2D) imagen.getGraphics()).setRenderingHint(
    RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
  ((java.awt.Graphics2D) imagen.getGraphics()).setRenderingHint(
    RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
  ((java.awt.Graphics2D) imagen.getGraphics()).drawImage(img, 0, 0, width, height, null);
  ((java.awt.Graphics2D) imagen.getGraphics()).dispose();
 
  if (!rotar) {
   javax.imageio.ImageIO.write(imagen, "png", new File(nombre));
  } else {
   buffy = new BufferedImage(imagen.getHeight(), imagen.getWidth(), BufferedImage.TYPE_INT_RGB);
   (new AffineTransformOp( AffineTransform.getRotateInstance(Math.toRadians(90),
   ((double) imagen.getHeight()) / 2.0f, ((double) imagen.getHeight()) / 2.0f),
   AffineTransformOp.TYPE_BILINEAR)).filter(imagen, buffy);
   javax.imageio.ImageIO.write(buffy, "png", new File(nombre));
  }
 }

 private void borrarTmp(File dir) {
  if (dir.listFiles() == null) { return; }
  for (int i = 0; i < dir.listFiles().length; i++) {
   if (dir.listFiles()[i].isDirectory()) {
    borrarTmp(dir.listFiles()[i]);
   } dir.listFiles()[i].delete();
  }
 }

}

Clase Fuente

package clases;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

public class Fuente extends javax.swing.JDialog {

 private int fila;  private JButton btnAccion;
 private JPanel pPal; private JPanel lPrevio;
 private JTextField origen, titulo, autor;
 int indice = 0, caracter; private javax.swing.JFileChooser chooser;
 private final DefaultTableModel mOri = new DefaultTableModel(new String[] { "Ruta Origen" }, 0) {
          public Class getColumnClass(int columnIndex) {
           return JTextField.class;
          } };
 private final JTable tOri= new JTable(mOri); private JScrollPane scroll;
 
 public Fuente(final boolean tpFuente, int selectedRow, final javax.swing.table.DefaultTableModel modelo) {
  super((new Principal()), "Fuente de Imagenes", false); //setLocationByPlatform(true);
  setIconImage(java.awt.Toolkit.getDefaultToolkit().getImage(getClass().getResource("/otros/manga.png")));
  fila = selectedRow; // setUndecorated(true);
  pPal = new JPanel() {/*
   @Override
   protected void paintComponent(java.awt.Graphics g) {
    ((java.awt.Graphics2D)g).drawRoundRect(0, 0, getWidth() - 1, getHeight() - 1, 20, 20);
    ((java.awt.Graphics2D)g).clip(new java.awt.geom.RoundRectangle2D.Float(0,0,getWidth(),getHeight()-1,12,12));
   }*/

  };// pPal.setBorder(BorderFactory.createLineBorder(java.awt.Color.DARK_GRAY, 2));
 
  if(!tpFuente) {   initDirectorio();
   if (!modelo.getValueAt(fila, modelo.findColumn("Origen")).toString().equalsIgnoreCase("[]")) {
    origen.setText(modelo.getValueAt(fila, modelo.findColumn("Origen")).toString());
   }
  } else {    initURL();  
   if (!modelo.getValueAt(fila, modelo.findColumn("Origen")).toString().equalsIgnoreCase("[]")) {
    java.util.Iterator it = ((java.util.Vector)(modelo.getValueAt(indice, modelo.findColumn("Origen")))).iterator();
    while(it.hasNext()) {
     mOri.addRow(new String[] {it.next().toString()});
    }
    scroll.setPreferredSize(new java.awt.Dimension(525, 21 + 16*(tOri.getRowCount())));
    setSize(getWidth(), getHeight()+16*(tOri.getRowCount()-1));
   } else { mOri.addRow(new String[] {""}); }
  } ((java.util.Vector)(modelo.getValueAt(fila, modelo.findColumn("Origen")))).removeAllElements();

  pPal.add(new javax.swing.JLabel("Titulo"));
  pPal.add(titulo = new JTextField(modelo.getValueAt(fila, modelo.findColumn("Titulo")).toString(), 15));
 
  pPal.add(new javax.swing.JLabel("Autor"));
  pPal.add(autor = new JTextField(modelo.getValueAt(fila, modelo.findColumn("Autor")).toString(), 15));
 
  JPanel pBtns = new JPanel();
  pBtns.setBorder(BorderFactory.createLineBorder(java.awt.Color.DARK_GRAY, 1));

  btnAccion = new JButton("Agregar y Regresar a Lista");
  btnAccion.addMouseListener(new java.awt.event.MouseAdapter() {
   @Override
   public void mouseClicked(java.awt.event.MouseEvent e) {
    if (!tpFuente) {
     ((java.util.Vector)(modelo.getValueAt(fila, modelo.findColumn("Origen")))).addElement(origen.getText());
    } else {
     for (int i = 0; i < mOri.getRowCount(); i++) {
      if(!mOri.getValueAt(i, mOri.findColumn("Ruta Origen")).toString().equalsIgnoreCase("")) {
       ((java.util.Vector)(modelo.getValueAt(fila, modelo.findColumn("Origen")))).addElement(mOri.getValueAt(i, mOri.findColumn("Ruta Origen")).toString());
      }
     }
    }
    modelo.setValueAt(titulo.getText(), fila, modelo.findColumn("Titulo"));
    modelo.setValueAt(autor.getText(), fila, modelo.findColumn("Autor"));
    modelo.setValueAt("Tratar", fila, modelo.findColumn("Estado"));
    modelo.addRow(modelo.getDataVector());  dispose();
   }
  });  pBtns.add(btnAccion);
 
  btnAccion = new JButton("Agregar y Crear Otro");
  btnAccion.addMouseListener(new java.awt.event.MouseAdapter() {
   @Override
   public void mouseClicked(java.awt.event.MouseEvent e) {
    if (!tpFuente) {
     ((java.util.Vector)(modelo.getValueAt(fila, modelo.findColumn("Origen")))).addElement(origen.getText());
    } else {
     for (int i = 0; i < mOri.getRowCount(); i++) {
      if(!mOri.getValueAt(i, mOri.findColumn("Ruta Origen")).toString().equalsIgnoreCase("")) {
       ((java.util.Vector)(modelo.getValueAt(fila, modelo.findColumn("Origen")))).addElement(mOri.getValueAt(i, mOri.findColumn("Ruta Origen")).toString());
      }
     }
    }
    modelo.setValueAt(titulo.getText(), fila, modelo.findColumn("Titulo"));
    modelo.setValueAt(autor.getText(), fila, modelo.findColumn("Autor"));
    modelo.setValueAt("Tratar", fila, modelo.findColumn("Estado"));
    modelo.addRow(modelo.getDataVector());   fila++;
    modelo.setValueAt(tpFuente, fila, modelo.findColumn("En Linea"));
   }
  });  pBtns.add(btnAccion);
 
  pPal.add(pBtns, java.awt.BorderLayout.SOUTH);
  add(pPal);  setVisible(true);
 }

 private void initURL() {
  setSize(550, 150);  scroll = new JScrollPane(tOri);
  scroll.setPreferredSize(new java.awt.Dimension(525, 21 + 16));
 
  tOri.addKeyListener(new java.awt.event.KeyAdapter() {
   @Override
   public void keyPressed(java.awt.event.KeyEvent e) {
    try {
     if(e.getKeyCode() == java.awt.event.KeyEvent.VK_INSERT) {  //nuevo.
      mOri.addRow(new String[] {""});  setSize(getWidth(), getHeight()+16);
      scroll.setPreferredSize(new java.awt.Dimension(getWidth()-25, 21 + 16*(tOri.getRowCount())));
     } else {
      if(e.getKeyCode() == java.awt.event.KeyEvent.VK_DELETE) { //eliminar.
       do {
       mOri.removeRow(tOri.getSelectedRow()); setSize(getWidth(), getHeight()-16);
       scroll.setPreferredSize(new java.awt.Dimension(getWidth()-25, 21 + 16*(tOri.getRowCount())));
       } while (tOri.getSelectedRowCount() != 0);
      } else {
       if (e.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER) { indice = 0;
        do {
        String origen = tOri.getValueAt(tOri.getSelectedRows()[indice], 0).toString();
        if (!origen.contains("[%i]") && !origen.equalsIgnoreCase("")) {
         caracter = origen.length();
         for(int c = origen.length()-1; c > 0 ; c--) {
          if(origen.charAt(c) == '.') {
           caracter = c;
           for( c = caracter-1; c > 0 ; c--) {
            if(origen.charAt(c) < '0' || origen.charAt(c) > '9') {
             origen = (origen.substring(0, c+1) + "[%i]"
               + origen.substring(caracter, origen.length()));
             break;
            }
           } break;
          }
         }
        } if(!origen.startsWith("http") && !origen.equals("")) {
         origen = ("http://"+origen);
        } tOri.setValueAt(origen, tOri.getSelectedRows()[indice], 0);  indice++;
        } while(tOri.getSelectedRows().length >= indice);
       }
      }
     }
    } catch (Exception exception) {}
   }
  });
 
  origen = new JTextField();
  origen.addKeyListener(new java.awt.event.KeyAdapter() {
   @Override
   public void keyPressed(java.awt.event.KeyEvent e) {
    if (e.getKeyCode() == java.awt.event.KeyEvent.VK_INSERT) {
     try { indice = origen.getSelectedText().length();
     } catch (Exception exc) { indice = 0;  }
     origen.setText(origen.getText().substring(0, origen.getCaretPosition()) + "[%i]"
          + origen.getText().substring(origen.getCaretPosition() + indice, origen.getText().length()));
    }
   }
  }); (tOri.getColumnModel().getColumn(0)).setCellEditor(new javax.swing.DefaultCellEditor(origen));
 
  pPal.add(scroll);
 }

 private void initDirectorio() {
  setSize(550, 500); chooser = new javax.swing.JFileChooser() {
   @Override
   public void approveSelection() {
    if (this.getSelectedFile().isDirectory()) {
     origen.setText(this.getSelectedFile().getAbsolutePath());
     titulo.setText(this.getSelectedFile().getName());
    } else {
     origen.setText(this.getSelectedFile().getParentFile().getAbsolutePath());
     titulo.setText(this.getSelectedFile().getParentFile().getName());
    }
   }
   @Override
   public void cancelSelection() {
    origen.setText(""); titulo.setText("");
   }
  }; chooser.setMultiSelectionEnabled(false);
  //chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
  chooser.setFileFilter(new javax.swing.filechooser.FileNameExtensionFilter("JPEG, JPG, PNG, BMP", "jpeg", "jpg", "png", "bmp"));
  chooser.setPreferredSize(new java.awt.Dimension(515, 330));
  scroll = new JScrollPane(chooser);
  scroll.setPreferredSize(new java.awt.Dimension(525, 340));
  pPal.add(scroll);
 
  pPal.add(new javax.swing.JLabel("Ruta Origen"));
  origen = new JTextField(); origen.setPreferredSize(new java.awt.Dimension(525, 20));
  pPal.add(origen);  origen.setEnabled(false);
 
 }

 @Override
 public void paint(java.awt.Graphics g) {
  scroll.setPreferredSize(new java.awt.Dimension(this.getWidth() - 25,scroll.getHeight()));
  //btnAccion.setPreferredSize(new java.awt.Dimension(this.getWidth() - 30, 23));
  super.paint(g);
 }
}

Descarga

Pueden descargar el proyecto completo desde aquí, y pueden visitarnos para mas información a Java Zone.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">