# Bilder skalieren



## gavanaa (18. August 2004)

hiho,

noch eine java-anfänger-frage.

Wie skaliere ich mit java bilder. also ich hab ein verzeichnis voller bilder, die ich alle auf z.b. max. 240 height oder max 240 width skalieren möchte und dann unter einem anderen namen speichere (es soll kein applet sein).

danke!

gruß

gavanaa


----------



## gavanaa (18. August 2004)

so, ich habs mal damit versucht, hat aber nicht so gaz geklappt...
der scheint anfangs alles schön zu machen, aber wenn ich mir die konvertiereten bilder anschauen, sehe ich nur einen schwarzen balken....


woran könnt's denn liegen?


```
import com.sun.image.codec.jpeg.*;
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import java.io.File;
public class test {
  public static void main(String[] args) throws Exception {
    // load image from INFILE
    
    
      
    File directory = new File("bilder"); //Verzeichnis in dem sich die zu konvertierenden Bilder befinden
    String[] dateinamen = directory.list();
    int anzahl = dateinamen.length;
    
    System.out.println("Anzahl der Dateien Ordner '" +  directory + "': "  + anzahl);
    
    
    // Beginn for-Schleife
    int i;
    for (i = 0; i < anzahl; i++)
        {    
            System.out.println("Konvertiere '" +  dateinamen[i] + "'!");
                   
                   // System.out.println(dateinamen[i]);
                   
                  
    Image image = Toolkit.getDefaultToolkit().getImage(dateinamen[i]);
    
    MediaTracker mediaTracker = new MediaTracker(new Container());
    mediaTracker.addImage(image, 0);
    mediaTracker.waitForID(0);
    
    // determine thumbnail size from WIDTH and HEIGHT
    
    int thumbWidth = Integer.parseInt("22"); // Max Breite der Bilder
    int thumbHeight = Integer.parseInt("30"); // Max Höhe der Bilder
    
    double thumbRatio = (double)thumbWidth / (double)thumbHeight;
    int imageWidth = image.getWidth(null);
    int imageHeight = image.getHeight(null);
    double imageRatio = (double)imageWidth / (double)imageHeight;
    if (thumbRatio < imageRatio) {
      thumbHeight = (int)(thumbWidth / imageRatio);
    } else {
      thumbWidth = (int)(thumbHeight * imageRatio);
    }
    
    // draw original image to thumbnail image object and
    // scale it to the new size on-the-fly
    
    BufferedImage thumbImage = new BufferedImage(thumbWidth, 
      thumbHeight, BufferedImage.TYPE_INT_RGB);
    
    Graphics2D graphics2D = thumbImage.createGraphics();
    
    graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
      RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    
    graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);
    
    // save thumbnail image to OUTFILE
    
    
    //Ausgabe  Das Verzeichnis wird nicht neu erstellt und muss schon bestehen
    BufferedOutputStream out = new BufferedOutputStream(new
      FileOutputStream( (directory + "/kl_" + dateinamen[i]) )); 
    
    
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    JPEGEncodeParam param = encoder.
      getDefaultJPEGEncodeParam(thumbImage);
    int quality = Integer.parseInt("70"); //Qualität des Bildes
    quality = Math.max(0, Math.min(quality, 100));
    param.setQuality((float)quality / 100.0f, false);
    encoder.setJPEGEncodeParam(param);
    encoder.encode(thumbImage);
    
    out.close();
    
    }
     // Ende for-Schleife
    System.out.println("Fertig mit dem Konvertieren!");
    System.exit(0);
        
     
          
    
      }
}
```

danke!


----------



## gavanaa (18. August 2004)

so sehen die bilder dann aus:

(da hatte ich die bilder aber nur auf 50*nochwas konvertiert...)


----------



## Thomas Darimont (18. August 2004)

Hallo!

Siehe:

http://www.tutorials.de/forum/showthread.php?threadid=132393&highlight=Skalieren
http://www.tutorials.de/forum/showthread.php?threadid=153788&highlight=Skalieren

Gruß Tom


----------



## gavanaa (19. August 2004)

geht irgendwie auch nicht so recht:

Fehler:



```
form.java [202:1] java.awt.Image is abstract; cannot be instantiated
             Image img = new Image(new File("img0.jpg")).getScaledInstance(320,240,100);
                         ^
1 error
Errors compiling form.
```


----------



## Thomas Darimont (19. August 2004)

Hmm, was hab ich denn da gemacht?


```
ImageIcon img = new ImageIcon(new File("c:/img0.jpg")).getImage().getScaledInstance(320,240,Image.SCALE_SMOOTH);
```

Gruß Tom


----------



## gavanaa (19. August 2004)

ok ich glaub ich bin einfach zu doof dafür...:


```
form.java [198:1] cannot resolve symbol
symbol  : class ImageIcon 
location: class form
              ImageIcon img = new ImageIcon(new File("img0.jpg")).getImage().getScaledInstance(320,240,Image.SCALE_SMOOTH);
              ^
form.java [198:1] cannot resolve symbol
symbol  : class ImageIcon 
location: class form
              ImageIcon img = new ImageIcon(new File("img0.jpg")).getImage().getScaledInstance(320,240,Image.SCALE_SMOOTH);
                                  ^
2 errors
Errors compiling form.
```


----------



## Thomas Darimont (19. August 2004)

Hallo!

Du musst auch die Klasse bzw. das Paket importieren indem die Klasse definiert ist:


```
...
import javax.swing.ImageIcon;
...
```

Gruß Tom

Ps.: Sag blos, da verirrt sich auch mal wer aus dem Saarland hierher


----------



## gavanaa (19. August 2004)

wie kommst du denn dadrauf?


----------



## Thomas Darimont (19. August 2004)

Nun, weil in deinem Package eben:

de.cdusaar.form stand ...

Gruß Tom


----------



## gavanaa (19. August 2004)

ohhh gott, ich hab alles versucht um es geheimzuhalten.....

aber sie haben mich durchschaut, aber jetzt wo es raus ist.. 

ok jetzt wisst ihr es alle! JA! ich bin ein saarländer (homburger falls es jemanden interessiert...)


----------



## gavanaa (19. August 2004)

übrigens wenn du wissen willst, was ich da eigentlich mache:

Ich mach grad eine Praktukum bei meinem Bruder, der nebenbei ein CMS (dass auf JAVA basiert (tomcat)) entwickelt hat.

Und dammit JAVA lernen soll, hat er mich an einen Rechner gesetzt und mit den Auftrag gegeben ich soll ihm mit JAVA eine Gallery installieren. Und das ganze, absolut ohne Programmier-Vorkenntnisse. Nun sitz ich schon seit einer Woche da und versuch mich so gut wie möglcih durchzuschlagen.... (heur ist wahrscheinlich mein letzter tag, ich darf auch erst gehen wenn die gall fertig ist...)

und dem server darf ich mich austoben


----------



## Thomas Darimont (19. August 2004)

Hallo!

Das ist aber ne "nette" Aufgabe, wenn du sonst noch keine Programmiererfahrung hast... Hals und Beinbruch

Gruß Tom


----------



## gavanaa (19. August 2004)

--------------------------------------------------------------------------------




```
import java.io.*;
import java.io.File;
import javax.swing.ImageIcon;


public class test 

{
    
  public static void main(String[] args) throws Exception 
  {
    
    // Verzeichniss (dateien) einlesen  
    File directory = new File("bilder/");
    String[] dateinamen = directory.list();
    int anzahl = dateinamen.length;
    
    System.out.println("Anzahl der Dateien im Ordner '" +  directory + "': "  + anzahl);
        
    // Beginn for-Schleife zum Konvertieren
    int i;
    for (i = 0; i < anzahl; i++)
        {    
            System.out.println("Konvertiere " + dateinamen[i]);
//Hier wird schon wieder ein Fehler angezeigt             
ImageIcon img = new ImageIcon( new File( (directory + dateinamen[i]) ) ).getImage().getScaledInstance(320,240,Image.SCALE_SMOOTH); //hier zeigt er schon wieder einen fehler an.....! 
    
        }
     // Ende for-Schleife
    
    System.out.println("Fertig mit dem Konvertieren!");
    System.exit(0);
   }
                

}
```


was ist denn da dran jetzt bitte falsch


----------

