web-dev-qa-db-fra.com

Obtention d'une image à partir d'une URL (Java)

J'essaie de lire l'image suivante

enter image description here

Mais cela montre IIOException.

Voici le code:

Image image = null;
URL url = new URL("http://bks6.books.google.ca/books?id=5VTBuvfZDyoC&printsec=frontcover&img=1& zoom=5&Edge=curl&source=gbs_api");
image = ImageIO.read(url);
jXImageView1.setImage(image); 
22
Nav Ali

Vous obtenez un HTTP 400 (Bad Request) erreur car il y a space dans votre URL. Si vous le corrigez (avant le paramètre zoom), vous obtiendrez un HTTP 400 erreur (non autorisé). Peut-être avez-vous besoin d'un en-tête HTTP pour identifier votre téléchargement en tant que navigateur reconnu (utilisez l'en-tête "User-Agent") ou d'un paramètre d'authentification supplémentaire.

Pour l'exemple User-Agent, utilisez alors ImageIO.read (InputStream) en utilisant le flux d'entrée de connexion:

URLConnection connection = url.openConnection();
connection.setRequestProperty("User-Agent", "xxxxxx");

Utilisez tout ce dont vous avez besoin pour xxxxxx

9
JScoobyCed

Ce code a bien fonctionné pour moi.

 import Java.io.FileOutputStream;
 import Java.io.IOException;
 import Java.io.InputStream;
 import Java.io.OutputStream;
 import Java.net.URL;

public class SaveImageFromUrl {

public static void main(String[] args) throws Exception {
    String imageUrl = "http://www.avajava.com/images/avajavalogo.jpg";
    String destinationFile = "image.jpg";

    saveImage(imageUrl, destinationFile);
}

public static void saveImage(String imageUrl, String destinationFile) throws IOException {
    URL url = new URL(imageUrl);
    InputStream is = url.openStream();
    OutputStream os = new FileOutputStream(destinationFile);

    byte[] b = new byte[2048];
    int length;

    while ((length = is.read(b)) != -1) {
        os.write(b, 0, length);
    }

    is.close();
    os.close();
}

}
17
swapnil gandhi

Essayez ceci:

//urlPath = address of your picture on internet
URL url = new URL("urlPath");
BufferedImage c = ImageIO.read(url);
ImageIcon image = new ImageIcon(c);
jXImageView1.setImage(image);
9
The Sniper

L'appel direct d'une URL pour obtenir une image peut entraîner des problèmes de sécurité majeurs. Vous devez vous assurer que vous disposez de droits suffisants pour accéder à cette ressource. Cependant, vous pouvez utiliser ByteOutputStream pour lire le fichier image. Ceci est un exemple (c'est juste un exemple, vous devez faire les changements nécessaires selon vos besoins.)

ByteArrayOutputStream bis = new ByteArrayOutputStream();
InputStream is = null;
try {
  is = url.openStream ();
  byte[] bytebuff = new byte[4096]; 
  int n;

  while ( (n = is.read(bytebuff)) > 0 ) {
    bis.write(bytebuff, 0, n);
  }
}
4
Ved

Essayez ceci:

class ImageComponent extends JComponent {
    private final BufferedImage img;

    public ImageComponent(URL url) throws IOException {
        img = ImageIO.read(url);
        setPreferredSize(new Dimension(img.getWidth(), img.getHeight()));

    }
    @Override protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(img, 0, 0, img.getWidth(), img.getHeight(), this);

    }
    public static void main(String[] args) throws Exception {

    final URL lenna =
        new URL("http://bks6.books.google.ca/books?id=5VTBuvfZDyoC&printsec=frontcover&img=1& zoom=5&Edge=curl&source=gbs_api");

    final ImageComponent image = new ImageComponent(lenna);

    JFrame frame = new JFrame("Test");
    frame.add(new JScrollPane(image));

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 300);
    frame.setVisible(true);
   }

}

1
Parth