Получение изображения из 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);
Ответы
Ответ 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);
}
}