2012-04-24 38 views
14

Estoy intentando leer la siguiente imagenimagen de la URL (Java)

enter image description here

Pero está mostrando IIOException.

Aquí está el código:

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

... y la excepción es ...? – Marcelo

+0

javax.imageio.IIOException ... "No se puede obtener la secuencia de entrada desde la URL!" –

+0

¿Bloqueaste tu aplicación en tu firewall? – Tobi

Respuesta

7

Usted está recibiendo una (Bad Request) Error HTTP 400 porque hay una space en su URL. Si lo soluciona (antes del parámetro zoom), obtendrá un error HTTP 400 (no autorizado). Tal vez necesite algún encabezado HTTP para identificar su descarga como un navegador reconocido (use el encabezado "User-Agent") o un parámetro de autenticación adicional.

Para el ejemplo de agente de usuario, a continuación, utilizar el ImageIO.read(InputStream) utilizando el flujo de entrada de conexión:

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

Use lo necesario para xxxxxx

+0

Espacio allí es por error ... De todos modos, ¿cómo agregar información de encabezado? –

+2

Agregué un ejemplo. – JScoobyCed

+0

Tengo el mismo problema, pero cuando agrego Image image = ImageIO.read (url) me sale un error - No puedo resolver el símbolo IO –

2

llamando directamente a una dirección URL para obtener una imagen puede referirse con los principales problemas de seguridad. Debe asegurarse de tener suficientes derechos para acceder a ese recurso. Sin embargo, puede usar ByteOutputStream para leer el archivo de imagen. Este es un ejemplo (Su sólo un ejemplo, que tiene que hacer los cambios necesarios como por su exigencia.)

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

intenta esto:

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

}

5

Prueba esto:

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

Esto no funcionará correctamente si url tiene algún parámetro de consulta – geek

13

Este código funcionó bien para mí.

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

} 
+0

Hola. ¿Hay una API que devuelva la imagen si proporciono un enlace al sitio web? http://stackoverflow.com/questions/38612896/android-load-thumbnail-from-website-url-using-glide-picasso – Zen

+1

prueba la biblioteca JSoup. Aquí está el enlace de referencia http://stackoverflow.com/questions/12465586/how-can-i-download-an-image-using-jsoup –

+0

¡Gracias! ¡me ayudó! –