read new imageio how handling example create java image javax.imageio ico

new - java image handling



¿Cómo obtener favicon.ico desde un sitio web utilizando Java? (3)

Antigua publicación, pero para futura referencia:

He escrito un complemento para ImageIO que agrega compatibilidad con los formatos .ICO (Icono de MS Windows) y .CUR (Cursor de MS Windows).

Puede obtenerlo en GitHub aquí: https://github.com/haraldk/TwelveMonkeys/

Una vez que hayas installed el complemento, deberías poder leer el ícono, usando el código en la publicación original sin ninguna modificación.

Así que estoy creando una aplicación para almacenar accesos directos a todas las aplicaciones favoritas del usuario, actuando como un concentrador. Puedo tener soporte para archivos reales y tengo un analizador .lnk para accesos directos. Pensé que también sería bueno que la aplicación fuera compatible con los accesos directos de Internet. Esto es lo que estoy haciendo:

Supongamos que estoy tratando de obtener el ícono de Google ( http://www.google.com/favicon.ico ).

  1. Comencé por deshacerme de las páginas adicionales (por ejemplo, www.google.com/anotherpage se convertiría en www.google.com .

  2. Luego, uso ImageIO.read(java.net.URL) para obtener la imagen.

El problema es que ImageIO nunca devuelve una imagen cuando llamo a este método:

String trimmed = getBaseURL(page); //This removes the extra pages Image icon = null; try { String fullURLString = trimmed + "/favicon.ico"; URL faviconURL = new URL(fullURLString); icon = ImageIO.read(faviconURL); } catch (IOException e) { e.printStackTrace(); } return icon;

Ahora tengo dos preguntas:

  1. ¿Admite Java el formato ICO aunque sea de Microsoft?
  2. ¿Por qué no puede leer ImageIO desde la URL?

¡Gracias de antemano!


No necesitas ImageIO para esto. Solo copie los bytes, igual que para cualquier otro recurso estático.


Pruebe Image4J .

Como muestra esta rápida sesión REPL de Scala (se puede pegar como código Java):

> net.sf.image4j.codec.ico.ICODecoder.read(new java.net.URL("http://www.google.com/favicon.ico").openStream()) res1: java.util.List[java.awt.image.BufferedImage] = [BufferedImage@65712a80: type = 2 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=ff000000 IntegerInterleavedRaster: width = 16 height = 16 #Bands = 4 xOff = 0 yOff = 0 dataOffset[0] 0]

ACTUALIZAR

Para responder a sus preguntas: ¿Java es compatible con ICO? No lo parece:

> javax.imageio.ImageIO.read(new java.net.URL("http://www.google.com/favicon.ico")) java.lang.IllegalArgumentException: Empty region!

¿Por qué no puede leer ImageIO desde la URL? Bueno, la URL en sí parece funcionar para mí, por lo que puede tener un problema de proxy / firewall, o podría ser el problema anterior.