Bilder skalieren

gavanaa

Mitglied
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
 
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?

Code:
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!
 
Zuletzt bearbeitet:
so sehen die bilder dann aus:

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

Anhänge

  • kl_337558.jpg
    kl_337558.jpg
    289 Bytes · Aufrufe: 766
Zuletzt bearbeitet:
geht irgendwie auch nicht so recht:

Fehler:


Code:
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.
 
Hmm, was hab ich denn da gemacht?

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

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

Code:
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.
 
Hallo!

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

Code:
...
import javax.swing.ImageIcon;
...

Gruß Tom

Ps.: Sag blos, da verirrt sich auch mal wer aus dem Saarland hierher ;)
 
Zurück