JPG in größe ändern und speichern

Status
Nicht offen für weitere Antworten.

uhlealex

Neues Mitglied
Hallo zusammen, ich hab folgendes Problem,
ich hab mir eine Methode zum ändern der Größe von Bildern geschrieben, jedoch ist das Bild nach dem ich es gespeichert hab leer oder nur schwarz, wenn ich es mit InfraView öffne. Es werden keine Compiler fehler oder anderes ausgegeben.

Hier mein Source:

Code:
    public boolean Resize(String imgSrc)
    {
        BufferedImage buf1 = null;
        try
        {
          buf1 = ImageIO.read(new File(imgSrc));
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        int width=300, height=300;
        
        Image image = ((Image)buf1).getScaledInstance(width,height,Image.SCALE_FAST);
        
        BufferedImage buf2 = new BufferedImage ( width, height, BufferedImage.TYPE_INT_RGB);
        buf2.createGraphics().drawImage( image, 0 ,0, this);
        
        try
        {
           ImageIO.write(buf2, "jpg", new File(imgSrc));
        }
        catch (IOException ie)
        {
            System.err.println("! IOException:"+ ie.getMessage());
        }
        return false;
    }

Wo liegt das Problem ???

Danke
 
kp, aber lass dir doch mal das Bild in einem Java-Fenster anzeigen, wenn's dort richtig ist, weißt du, das es am speichern liegt...

Ich glaube nicht, das der Fehler innerhalb des geposteten Codes liegt, sondern beim speichern oder so....du solltest z.B. vermeiden, die gleiche Datei zu überschreiben, das gibt immer Probleme in Java.


[offtopic]
Und notfalls nimmst du die Resizefunktion von Irfanview;-)
[/offtopic]
 
So, habe mal den Code etwas formatiert und ein paar Änderungen vorgenommen:
Code:
package test;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class ImageResize {

	public static void main(String[] args) {
		boolean result;
		String path = "C:\\Dokumente und Einstellungen\\grizzly\\Desktop\\";
		
		result = resize(path + "test1.jpg", path + "test2.jpg");
		System.out.println(result);
	}
	
	public static boolean resize(final String srcFile, final String destFile) {
		BufferedImage srcImage, destImage;
		Image image;
		int width = 300;
		int height=300;
		Graphics g;
		
		// Grafik laden.
		try {
			srcImage = ImageIO.read(new File(srcFile));
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}
		// Grafik skalieren.
		image = srcImage.getScaledInstance(width, height, Image.SCALE_FAST);
		// Grafik zeichen.
		destImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		g = destImage.createGraphics();
		g.drawImage(image, 0, 0, null);
		g.dispose();
		// Grafik speichern.
		try {
			ImageIO.write(destImage, "jpg", new File(destFile));
		} catch (IOException ie) {
			ie.printStackTrace();
		}
		return true;
	}
}
Ich speichere das neue Bild in eine andere Datei. Weiter gebe ich den Grafikkontext mit g.dispose() wieder frei. Den Rest habe ich gleich gelassen. Und es funktioniert wunderbar. 🙂
 
schön!

Wenn du jetzt noch das alte Bild irgendwie vorher löschst, kannst du wahrscheinlich auch das alte gleich überspeichern! bzw. neu anlegen dann...

Dann kannst du noch die args[] auswerten und fertig hast du ein universelles Resizetool!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben