Подтвердить что ты не робот

Получение изображения из URL (Java)

Я пытаюсь прочитать следующее изображение

enter image description here

Но он показывает исключение IIOException.

Вот код:

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); 
4b9b3361

Ответ 1

Вы получаете ошибку HTTP 400 (неудачный запрос), поскольку в URL-адресе есть space. Если вы исправите его (перед параметром zoom), вы получите ошибку HTTP 400 (неавторизованный). Возможно, вам нужен HTTP-заголовок, чтобы идентифицировать вашу загрузку как признанный браузер (используйте заголовок "User-Agent" ) или дополнительный параметр проверки подлинности.

Для примера User-Agent используйте ImageIO.read(InputStream) с помощью входного потока подключения:

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

Используйте все необходимое для xxxxxx

Ответ 2

Этот код работал отлично для меня.

 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();
}

}

Ответ 3

Попробуйте следующее:

//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);

Ответ 4

Непосредственный вызов URL-адреса для получения изображения может касаться основных проблем безопасности. Вы должны убедиться, что у вас есть достаточно прав на доступ к этому ресурсу. Однако вы можете использовать ByteOutputStream для чтения файла изображения. Это пример (это просто пример, вам необходимо внести необходимые изменения в соответствии с вашим требованием.)

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);
  }
}

Ответ 5

Попробуйте следующее:

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);
   }

}