Bilder herunterladen und hochladen
In diesem Kapitel erfahren Sie, wie Sie ein Bild aus dem Internet herunterladen, einige Bildverarbeitungstechniken für das Bild ausführen und das verarbeitete Bild dann erneut auf einen Server hochladen können.
Ein Bild herunterladen
Um ein Bild von einer Website herunterzuladen, verwenden wir die Java-Klasse mit dem Namen URL, die unter zu finden sind java.netPaket. Die Syntax ist unten angegeben -
String website = "http://tutorialspoint.com";
URL url = new URL(website);
Abgesehen von der obigen Methode stehen in der Klassen-URL andere Methoden zur Verfügung, wie kurz beschrieben -
Sr.Nr. | Methode & Beschreibung |
---|---|
1 |
public String getPath() Es gibt den Pfad der URL zurück. |
2 |
public String getQuery() Es gibt den Abfrageteil der URL zurück. |
3 |
public String getAuthority() Es gibt die Autorität der URL zurück. |
4 |
public int getPort() Es gibt den Port der URL zurück. |
5 |
public int getDefaultPort() Es gibt den Standardport für das Protokoll der URL zurück. |
6 |
public String getProtocol() Es gibt das Protokoll der URL zurück. |
7 |
public String getHost() Es gibt den Host der URL zurück. |
Beispiel
Das folgende Beispiel zeigt die Verwendung der Java-URL-Klasse zum Herunterladen eines Bildes aus dem Internet.
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
public class Download {
public static void main(String[] args) throws Exception {
try{
String fileName = "digital_image_processing.jpg";
String website = "http://tutorialspoint.com/java_dip/images/"+fileName;
System.out.println("Downloading File From: " + website);
URL url = new URL(website);
InputStream inputStream = url.openStream();
OutputStream outputStream = new FileOutputStream(fileName);
byte[] buffer = new byte[2048];
int length = 0;
while ((length = inputStream.read(buffer)) != -1) {
System.out.println("Buffer Read of length: " + length);
outputStream.write(buffer, 0, length);
}
inputStream.close();
outputStream.close();
} catch(Exception e) {
System.out.println("Exception: " + e.getMessage());
}
}
}
Ausgabe
Wenn Sie das oben angegebene ausführen, wird die folgende Ausgabe angezeigt.
Das folgende Bild wird vom Server heruntergeladen.
Ein Bild hochladen
Lassen Sie uns sehen, wie Sie ein Bild auf einen Webserver hochladen. Wir konvertieren ein BufferedImage in ein Byte-Array, um es an den Server zu senden.
Wir verwenden die Java-Klasse ByteArrayOutputStream, die unter zu finden sind java.ioPaket. Die Syntax ist unten angegeben -
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", baos);
Um das Bild in ein Byte-Array zu konvertieren, verwenden wir toByteArray() Methode von ByteArrayOutputStreamKlasse. Die Syntax ist unten angegeben -
byte[] bytes = baos.toByteArray();
Abgesehen von der obigen Methode stehen in der ByteArrayOutputStream-Klasse weitere Methoden zur Verfügung, wie kurz beschrieben -
Sr.Nr. | Methode & Beschreibung |
---|---|
1 |
public void reset() Diese Methode setzt die Anzahl der gültigen Bytes des Byte-Array-Ausgabestreams auf Null zurück, sodass alle im Stream akkumulierten Ausgaben verworfen werden. |
2 |
public byte[] toByteArray() Diese Methode erstellt ein neu zugewiesenes Byte-Array. Seine Größe entspricht der aktuellen Größe des Ausgabestreams, und der Inhalt des Puffers wird in diesen kopiert. Es gibt den aktuellen Inhalt des Ausgabestreams als Byte-Array zurück. |
3 |
public String toString() Konvertiert den Pufferinhalt in eine Zeichenfolge. Die Übersetzung erfolgt gemäß der Standard-Zeichenkodierung. Es gibt den aus dem Inhalt des Puffers übersetzten String zurück. |
4 |
public void write(int w) Es schreibt das angegebene Array in den Ausgabestream. |
5 |
public void write(byte []b, int of, int len) Es schreibt die Anzahl der Bytes ab dem Offset in den Stream. |
6 |
public void writeTo(OutputStream outSt) Es schreibt den gesamten Inhalt dieses Streams in das angegebene Stream-Argument. |
Beispiel
Das folgende Beispiel zeigt, wie ByteArrayOutputStream ein Bild auf den Server hochlädt.
Kundencode
import javax.swing.*;
import java.net.*;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Client{
public static void main(String args[]) throws Exception{
Socket soc;
BufferedImage img = null;
soc=new Socket("localhost",4000);
System.out.println("Client is running. ");
try {
System.out.println("Reading image from disk. ");
img = ImageIO.read(new File("digital_image_processing.jpg"));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(img, "jpg", baos);
baos.flush();
byte[] bytes = baos.toByteArray();
baos.close();
System.out.println("Sending image to server. ");
OutputStream out = soc.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
dos.writeInt(bytes.length);
dos.write(bytes, 0, bytes.length);
System.out.println("Image sent to server. ");
dos.close();
out.close();
} catch (Exception e) {
System.out.println("Exception: " + e.getMessage());
soc.close();
}
soc.close();
}
}
Servercode
import java.net.*;
import java.io.*;
import java.awt.image.*;
import javax.imageio.*;
import javax.swing.*;
class Server {
public static void main(String args[]) throws Exception{
ServerSocket server=null;
Socket socket;
server = new ServerSocket(4000);
System.out.println("Server Waiting for image");
socket = server.accept();
System.out.println("Client connected.");
InputStream in = socket.getInputStream();
DataInputStream dis = new DataInputStream(in);
int len = dis.readInt();
System.out.println("Image Size: " + len/1024 + "KB");
byte[] data = new byte[len];
dis.readFully(data);
dis.close();
in.close();
InputStream ian = new ByteArrayInputStream(data);
BufferedImage bImage = ImageIO.read(ian);
JFrame f = new JFrame("Server");
ImageIcon icon = new ImageIcon(bImage);
JLabel l = new JLabel();
l.setIcon(icon);
f.add(l);
f.pack();
f.setVisible(true);
}
}
Ausgabe
Clientseitige Ausgabe
Wenn Sie den Clientcode ausführen, wird die folgende Ausgabe auf der Clientseite angezeigt:
Serverseitige Ausgabe
Wenn Sie den Servercode ausführen, wird auf der Serverseite der folgende Befehl angezeigt:
Nach dem Empfang des Bildes zeigt der Server das Bild wie folgt an: