es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

ImageIO.read(inputStream) devuelve un error de datos de perfil ICC no válidos.

En mi proyecto, estoy leyendo una imagen de esta manera:

BufferedImage originalImage = ImageIO.read(inputStream);

Pero de vez en cuando, este método arroja la excepción Error de datos de perfil icc no válidos.
Cuando revisé la imagen importada, descubrí que el campo de bytes de la imagen contiene el texto ICC_PROFILE
Aquí hay un ejemplo. Pero lo curioso es que cuando cambio los bytes a 0000 en la posición donde está este texto, todo funciona.

Y aquí está la imagen donde ocurre la excepción, para probar.

Por favor, ayuda con la solución.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está relacionado con los datos del perfil ICC de la imagen. Una posible solución es eliminar o reemplazar los datos del perfil ICC antes de leer la imagen usando javax.imageio. Aquí hay unos pasos que puedes seguir:

    1. Obtén los bytes de la imagen desde el flujo de entrada:
    byte[] imageBytes = inputStream.readAllBytes();
    
    1. Encuentra la posición del texto ICC_PROFILE en los bytes de la imagen:
    int position = indexOf(imageBytes, "ICC_PROFILE".getBytes());
    
    1. Reemplaza el texto ICC_PROFILE con ceros (0x00):
    for (int i = position; i < position + 12; i++) {
        imageBytes[i] = 0x00;
    }
    

    El código anterior reemplazará el texto ICC_PROFILE con 12 ceros, lo cual debería ser suficiente para eliminar los datos del perfil.

    1. Crea un nuevo flujo de entrada a partir de los bytes de la imagen modificados:
    ByteArrayInputStream modifiedInputStream = new ByteArrayInputStream(imageBytes);
    
    1. Lee la imagen usando javax.imageio:
    BufferedImage image = ImageIO.read(modifiedInputStream);
    

    Esto debería leer la imagen sin lanzar la excepción “Error de datos de perfil ICC no válidos”.

    Nota: Esta solución puede no funcionar para todas las imágenes que tienen datos de perfil ICC, ya que eliminar los datos del perfil puede afectar los colores y otras propiedades de la imagen. Sin embargo, debería funcionar para la mayoría de los casos donde los datos del perfil son inválidos o causan problemas.

Comments are closed.