Cargando imágenes desde Java

29Ene09

En este pequeño post veremos como cargar imagenes en Java, tanto si se encuentran dentro del mismo Jar de la aplicación, como si la imagen se encuentra fuera del misma.


En ambos casos vamos a utilizar la clase ImageIcon para recuperar la imagen. Luego de obtener la imagen, esta clase nos permitirá utilizarla tanto para íconos, fondo de contenedores, etc.

Imágen externa al Jar

Este es el caso que se produce cuando la imagen se encuentra en alguna carpeta del sistema operativo:

cargar_img_01

Para cargarla podemos indicarle a ImageIcon tanto el path relativo (desde donde se ejecuta el Jar) como el path absoluto de la imagen.

Se realiza de la siguiente forma (ver que se utiliza getImage()):

Image imagenExterna = new ImageIcon("tierra.jpg").getImage();

Imágen interna al Jar

Este caso ocurre cuando la imagen se encuentra dentro del Jar de la aplicación:

cargar_img_02

Para cargarla podemos indicarle a ImageIcon el recurso que se quiere utilizar. Para instanciar el recurso debemos indicar el path relativo (desde la clase que quiere cargar la imagen) como el path absoluto de la imagen dentro del Jar (un path absoluto en el jar comienza con /, como por ejemplo «/ar/lefunes/recurso/imagen.png»).

Se realiza de la siguiente forma:

Image imagenInterna = new ImageIcon(
   getClass().getResource("satelite.jpg")
).getImage();

Ejemplo

Un ejemplo de como se pueden utilizar estos conceptos junto con la clase JPanelConFondo que vimos en un post anterior.

Código:

package ar.lefunes.cargarimagenes;

import java.awt.Image;
import javax.swing.ImageIcon;

public class CargaImagenes extends javax.swing.JFrame {
    private JPanelConFondo jPanelConFondo1 = new JPanelConFondo();
    private JPanelConFondo jPanelConFondo2 = new JPanelConFondo();   

    public CargaImagenes() {
        //...
        cargarImagenes();
    }

    private void cargarImagenes() {
        Image imagenInterna = new ImageIcon(
           getClass().getResource("satelite.jpg")).getImage();
        jPanelConFondo1.setImagen(imagenInterna);

        Image imagenExterna = 
            new ImageIcon("tierra.jpg").getImage();
        jPanelConFondo2.setImagen(imagenExterna);
    }

    //...             
}

Al ejecutar el código obtendremos la siguiente pantalla:

cargar_img_03

tener en cunta que la imagen externa («tierra.jpg» en este ejemplo) tienen que estar en la misma carpeta del jar, ó en la carpeta raiz del proyecto cuando ejecutamos el proyecto desde NetBeans.

Ejemplo Descargable

Puedes descargar el ejemplo completo desde http://lefunes.googlecode.com/files/CargarImagenes.zip (aprox. 54 KB)

Espero les sirva
Saludos



50 Responses to “Cargando imágenes desde Java”

  1. Hola me podrían ayudar necesito ver una imagen en eclipse que se encuentra almacenada en DB4o

  2. 2 John

    hola necesito visualizar una imagen externa desde netbeans, pero que no se encuentre dentro de las carpetas del proyecto, si no indicandole la ruta, quiero el codigo java… gracias

  3. 3 IVAN

    HOLA AMIGO AYUDAME NO SE COMO MOSTRAR I OCULTAR UNA IMAGEN JAVA ME.

  4. 4 Leo

    Hola que tal, muchas gracias por tus ejemplos, me están sirviendo mucho dado que apenas comienzo a programar en Java. Saludos.

  5. 5 Juan

    Muy bueno el ejemplo, lastima que no carga la imagen….

  6. 6 Aldo Cortés

    Muchas gracias si me sirvio tu explicacion. Saludos

  7. A mi me genera el error «java.lang.NullPointerException» uso esta ruta de imagen «/Image.png» y la imagen esta en la carpeta del proyecto, no en la de recursos ¿que ocurre?

    • 8 Juan

      A mi me sucede lo mismo, podrian indicar el fix adeacuado, porque cuando se abre en netbeans (no se por que) borra los private JPanel1 y JPanel 2 que se declaran al final de la clase carga imagenes pero, aun asi no puedo lograr que el JFrame haga el diplay de la imagen.

  8. 9 Diego torres

    Primer comentario del 2013 solo para decirte GRANDE MAN!!! Probe con 29184902190519275 de formas y la tuya excelente 😉 good

  9. 10 Al ballena

    Genial y breve, exactamente lo que necesitaba saber.

  10. 11 william

    hola amigo …buen post… quisiera saber como se carga una imagen bit a bit en java utilizando swing en neatbeans
    (utilizando interfaz grafica de java) agradeceria si me solucionara ese problema

  11. 12 jorge

    El mejor que he encontrado.Muchíssimas gracias

  12. 13 nana

    necesito saber como pintar una imagen en netbeans 7.1.1, si la imagen esta en mi equipo.

  13. 14 nvt47

    Tengo un problema, espero me puedas ayudar.
    Cargo imagenes animadas,pero que se repiten una sola ves. Cuando quiero volver a cargar esa misma imagen ya no me lo vuelve a cargar, simplemente muestra la ultima imagen de la imagen animada. el ultimo frame pues….no se como puedo yo hacer que cargue desde el principio, que empiece con el primer frame de laimagen .gif
    espero me puedas ayudar, gracias.

  14. 15 Pato

    Muchas gracias, me sirvio de mucho tu ejemplo 😀

  15. 16 osmany

    Por favor necesito que una imagen como un icono haga funcion de boton el cual tenga eventos, ayudenme.

  16. 17 SOFIA

    Hola, quiciera saber como puedo mostrar una imagen en un reporte generado en netbeans. Dicho reporte fue creado en una forma Java Class.

    Gracias

  17. 18 cipri

    muchas gracias por tu codigo me ha sido muy util

    saludos!!!

  18. Para cargar una imagen desde una ruta del tamaño que yo quiero hice lo siguiente…

    //Yo lo hice así: Primero la librería:

    import java.awt.Image;

    //Ahora:

    ImageIcon icono = new ImageIcon(jTextField1.getText().toString());//Cargo imagen desde la ruta que ingreso en un jTextField1.
    Image imagen = icono.getImage(); //La paso a imagen para redimencionarla.
    ImageIcon iconoEscalado = new ImageIcon (imagen.getScaledInstance(100,100,Image.SCALE_SMOOTH)); //Tomo el Image Icon con la imagen redimencionada
    jLabel1.setIcon(iconoEscalado);//La Coloco en un Jlabel para visualizarla.

    Claro leí desde la Fuente:
    http://www.forosdelweb.com/f45/imagenes-java-391635/

  19. 20 Phy

    Muchas gracias, no sabes cuanto tiempo invetí buscando un ejemplo como este. Graciaaaaaaaaaaaas.

  20. 21 beto

    me gustaría saber como hacerle para q la imagen me imprima junto con un proceso,esq solo me imprime la imagen y el proceso por otro lado,como puedo hacerle para q aparezca junto. la imagen como fondo de mi proceso o solo introducirla enos case para cuando quiera entrar a ese case imprima la imagen

    espero y puedan ayudarme muchísimas gracias

  21. 22 hector

    hola que tal bueno como puedo yo colocAR una imagen de fondo a un formulario y
    que los botones o labeles salgan por encima de la imagen

  22. 23 Tania

    HOLA!!
    TENGO TODO LA IMAGEN Y TODO…
    ME SIGUE SIN MOSTRAR LA IMAGEN… A QUE SE DEBERA?

  23. 24 JORGE REYES

    SI SE COMO DESCOMPRIMIRLO PERO COMO ULTILIZARLO EN JAVA PARA VER LOS EJEMPLOS

  24. 25 JORGE REYES

    HAZ UN VIDEO DE COMO USAR TU ARCHIVO DE EJEMPLO PORFAVOR

  25. 26 jorge

    por favor necesito ayuda para expandir y disminuir una imagen con el slider en java gracias..

  26. 27 Csstungfurher

    scull
    Usa la clase SwingWorker para que haga en un hilo aparte (underground) la carga de la imagen y no se trave … saludos

  27. 28 scull

    Hola a todos tengo un explorador de imagenes en java que me funciona correctamente, en el puedo vizualizar las fotos de mi maquina y de una vaze de datos perfectamente

    lo que sucede es que estoy algo decepcionado con la velocidad en que java carga las imagenes . Les explico mas:
    én un panel tengo el arbol de directorios y en otro panel muestro las miniaturas de del directorio seleccionado estilo el explorador de windows

    pero cuando las imagenes son muy grandes (1 a 6 megas) tarda 2-4 cargando las fotos sin contar el tiempo en escalarlas que en este momento es despreciable.

    Alguien sabe como optimizar esto en java?????

    gracias de entemano

  28. Gracias en verdad, muchísimas gracias. le hice un par de correcciones al código, pero no es nada como para comentar. Está perfecto. Qué sería de mi sin personas que ayuden a los demás como tú, desinteresadamente. Muchas gracias nuevamente.

  29. 30 jhony

    muy bueno gracias me ayudo bastante para colocarl unas imagenes, ya que lo hacia pero tenia el problema de que cuando generaba el jar no aparecia las imagenes y todo era por el getClass().getResourse(), solo que tenia el problema de que leia el fichero de la imagen con un ImageIO. lo cual al hacerlo con un Image y luego usar el ImageIcon me facilito todo gracias!.

  30. 31 Alejandro

    Hola que tal ojala alguien me pueda ayudar, tengo una imagen que la he tomado desde la base de datos de un campo tipo BLOB y deseo verla en un pequeño tamaño como le hago si de antemano se que mis imagenes son de distintos tamaños y quisiera mostrarlos todos del mismo

    • 32 join

      puedes definir el tamaño de las imagenes al inicio del programa
      con variables donde definas que tan la alto y ancho lo quieres y ya despues
      solo ir cargando tus imagenes con getImage(X,Y).

  31. 33 Nacho

    hola sabes que cuando cargo el proyecto que dejaste como ejemplo me salta este error si me podes decir qeu estoy haciendo mal te agradesco, justo estoy necesitando colocar una imagen y es uno de los pocos post que esta claro.
    muchas gracias

    Exception in thread «AWT-EventQueue-0» java.lang.NullPointerException
    at javax.swing.ImageIcon.(ImageIcon.java:167)
    at ar.lefunes.cargarimagenes.CargaImagenes.cargarImagenes(CargaImagenes.java:25)
    at ar.lefunes.cargarimagenes.CargaImagenes.(CargaImagenes.java:21)
    at ar.lefunes.cargarimagenes.CargaImagenes$1.run(CargaImagenes.java:121)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

  32. hola… no se si se puede cargar imagen con netbeans (java) desde un servidor es decir el jar esta en el pc cliente y la imagen se encuentra en un servidor y quiero mostrar la imagen en la pc cliente… se prodra!!!

  33. 35 vejaranov

    Muchas gracias por la explicación !!!!!!

  34. 36 jose lazaro lujerio

    broer cvr tus ejemplo gracias no podrias mandarme mini proyectos con interfaz graficas o una calculadora cientifica en java netbeans

  35. hola me gustaria saber como añadir a un panel una imagen desde un boton examinar que me abra el explorador de windows y la tome de cualquiera ruta, pero que se pueda colocar al mismo tamaño del panel asi sea que la imagen examinada sea grande y el panel pequeño

    espero pronta respuesta gracias…

  36. Hola me gustaria saber como arrastro una imagen con el mouse

  37. 39 jm

    bueno en lo particular me sirvio para enterder el manejo de las clases
    no todo es facil hay que hacer algo nosotros.

  38. El ejemplo es muy pobre, no explica nada y los archivos de descargar son pura basura… si va a colocar algo para que lo leamos lo demás, que sea algo que valga la pena… Shell Joshe

    • 41 Leonardo

      Me hice una pregunta cuando leí tu comentario: «¿Por qué este tipo tiene que menospreciar el trabajo de alguien que se nota que tiene amor por lo que hace?». A mi parecer, si a una persona no le gusta el trabajo de otra por «x» motivo pues entonces sale de la página, blog, foro, etc. y busca otra que tenga la información que está buscando.
      No entiendo la necesidad de «postear» un comentario tan negativo.

      Ahora te hago la pregunta yo… ¿Por qué razón lo hacés?

      En cuanto al tutorial, una obra maestra… Muy bien explicado además de sencillo. Gracias por hacer esto.

      Saludos,
      Leonardo

  39. @Veronica simplemente agrega un label a tu panel y hace click «…» de la propiedad «icon» del mismo. Ahí te pregunta desde donde querés cargar la imagen.

    Saludos

  40. 43 Veronica

    Hola:

    Como le puedo hacer para insertar una imagen en NetBeans seleccionando yo la ruta donde se encuentra la imagen,
    Todo esta desde un boton examinar y me abra el explorador de windows.

    Sin mas por el momento les agradeseria muchisimo que me orientaran.

    • 44 cesar

      JFileChooser g = new JFileChooser();
      g.setMultiSelectionEnabled(false);
      g.showOpenDialog(null);
      if (g.getSelectedFile() != null) {
      ImageIcon image = new ImageIcon(g.getSelectedFile().getPath());
      LblImg.setText(«»);
      if (image.getIconHeight() > 128 || image.getIconWidth() > 128) {
      ImageIcon imageScalada = new ImageIcon(image.getImage().getScaledInstance(379, 392, 128));
      LblImg.setIcon(imageScalada);
      carta_presentacion = image.getDescription();
      JOptionPane.showMessageDialog(null, carta_presentacion);
      l.InseInicio(carta_presentacion);
      } else {
      LblImg.setIcon(image);
      }

      }

  41. 45 Andres Altamirano

    Eternas gracias!!! la verdad q siempre habia visto paginas de este tema pero la explicacion tuya se lleva el premio, muy sencilla y anda perfecto…

  42. 46 Enrik

    Gracias LeFunes! todo un detallazo tu explicación para gente que esta empezando en esto como yo.

    Saludos.


  1. 1 sprawdź
  2. 2 check
  3. 3 Blog de JAVA - FinderIT » Blog Archive » Cargando imágenes desde Java
  4. 4 Bitacoras.com