JPG von URL speichern

  • Themenstarter Themenstarter Lars133
  • Beginndatum Beginndatum
L

Lars133

Hallo Leute,

ich habe ein kleines Problem und hoffe es kann mir jemand weiter helfen.

Ich versuche derzeit ein jpg File, mit dem folgenden Code, von einer URL in eine Datei zu speichern.

Java:
public class Bild1 {
	public static void main(String[] args) {
		try {
			int i = 0;
			while(i==0){
			while (t!=10e8){t++;}
                        t = 0;
			ImageIcon myImage = new ImageIcon(new URL("http://www.dhm.de/webcams/pics/cam2_video.jpg"));
		        Image img = myImage.getImage();
		        BufferedImage img2 = new BufferedImage(img.getHeight(null), img.getWidth(null),
		                                           BufferedImage.TYPE_INT_RGB);
		         img2.createGraphics().drawImage(img,0,0,null);
		         ImageIO.write(img2,"jpg",new File("C:\\test1.jpg"));
			}			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}



Funktioniert soweit auch, aber das Problem ist das nur einmal das aktuelle Bild gespeichert wird. Alle weiteren Durchläufe wird immer wieder das alte Bild gespeichert.
Wenn ich das Programm von Hand neu starte ist wieder das aktuelle vorhanden, in den Durchläufen der Endlosschleife aber immer nur wieder das erste...
Wenn ich den Link über den Browser aktualisiere t es auch.

Also das Ziel nochmal ist, das Ganze in der Endlosschleife laufen zu lassen und unter c:/test1.jpg immer das aktuelle Bild der Webcam zu finden.

Wäre super wenn ihr mir helfen könntet.
 
Das ginge indem du das Bild immer wieder neu runterlädst. ImageIcon scheint einfach nur einen Puffer oder sowas zu lesen, genauso wie Toolkit.getDefaultToolkit().getImage(). Wenn man aber Toolkit.getDefaultToolkit().createImage() verwendet, dann wird das Bild immer wieder neu runtergeladen und dann geht das auch.
Java:
package de.tutorials.lars133.imagedownloader;

import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class ImageDownloader {
	public static void main(String[] args) {
		Image img = null;

		// MediaTracker zum Warten, bis das Bild fertig erstellt ist
		MediaTracker mt = new MediaTracker(new JPanel());
		while(true) {
			try {
				TimeUnit.SECONDS.sleep(5);
			} catch(InterruptedException e) {
				e.printStackTrace();
			}

			try {
				img = Toolkit.getDefaultToolkit().createImage(
						new URL("http://www.dhm.de/webcams/pics/cam2_video.jpg"));

				// Darauf warten, dass das Bild fertig erstellt wird, bevor man
				// es für die weitere Verarbeitung benutzt
				mt.addImage(img, 0);
				mt.waitForAll();
			} catch(MalformedURLException e) {
				e.printStackTrace();
			} catch(InterruptedException e) {
				e.printStackTrace();
			}
			if(img == null) {
				continue;
			}

			BufferedImage bimg = new BufferedImage(img.getWidth(null),
					img.getHeight(null), BufferedImage.TYPE_INT_RGB);
			bimg.getGraphics().drawImage(img, 0, 0, null);
			try {
				ImageIO.write(bimg, "jpg", new File("/home/link/bild.jpg"));
			} catch(IOException e) {
				e.printStackTrace();
			}

			// Bild wieder aus dem MediaTracker entfernen
			mt.removeImage(img);
		}
	}
}
Aber kannst du mir mal verraten, warum du das überhaupt so machst, also in ein BufferedImage "kopieren"? Lass doch mit ImageIO das Bild auslesen und dann gleich schreiben, ist viel kürzer und übersichtlicher ^^
Java:
package de.tutorials.lars133.imagedownloader;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

import javax.imageio.ImageIO;

public class ImageDownloader2 {
	public static void main(String[] args) {
		while(true) {
			try {
				TimeUnit.SECONDS.sleep(5);
			} catch(InterruptedException e) {
				e.printStackTrace();
			}

			try {
				ImageIO.write(ImageIO.read(new URL(
						"http://www.dhm.de/webcams/pics/cam2_video.jpg")),
						"jpg", new File("/home/link/bild.jpg"));
			} catch(MalformedURLException e) {
				e.printStackTrace();
			} catch(IOException e) {
				e.printStackTrace();
			}
		}
	}
}
 
Zurück