Cambiar el tamaño del archivo de imagen conservando la información jpg Exif
Frecuentes
Visto 2,731 veces
2
Me gustaría copiar imágenes con todos los datos de imagen Exif también copiados.
Tengo una aplicación Java que lee un jpg en un objeto de imagen, lo cambia de tamaño y luego escribe el objeto de imagen en un archivo jpg en otra carpeta.
El problema es que pierde toda esa buena información de la imagen (cámara, fecha, etc.). ¿Algunas ideas?
2 Respuestas
0
Aunque está diseñada para Android, esta solución está en Java y debería ser útil para copiar todos los metadatos EXIF de un archivo a otro:
http://bricolsoftconsulting.com/copying-exif-metadata-using-sanselan/
Tenga en cuenta que Sanselan ha sido rebautizado recientemente como Commons Imaging y se puede encontrar aquí:
Respondido 26 Jul 13, 05:07
0
Una opción es usar la imagen IO como esta:
try (ImageInputStream inputStream = new FileImageInputStream(new File("Landscape_3.jpg"))) {
Iterator<ImageReader> readerIterator = ImageIO.getImageReaders(inputStream);
ImageReader reader = readerIterator.next();
reader.setInput(inputStream);
Iterator<IIOImage> imageIterator = reader.readAll(null);
IIOImage image = imageIterator.next();
BufferedImage srcImage = (BufferedImage) image.getRenderedImage();
AffineTransformOp scaleOp = new AffineTransformOp(AffineTransform.getScaleInstance(0.5, 0.5), AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
BufferedImage resultImage = scaleOp.createCompatibleDestImage(srcImage, null);
resultImage = scaleOp.filter(srcImage, resultImage);
image.setRenderedImage(resultImage);
ImageWriter writer = ImageIO.getImageWriter(reader);
try (ImageOutputStream outputStream = new FileImageOutputStream(new File("Landscape_3_preserve_exif.jpg"))) {
writer.setOutput(outputStream);
writer.write(image);
}
try (ImageOutputStream outputStream = new FileImageOutputStream(new File("Landscape_3_discard_exif.jpg"))) {
writer.setOutput(outputStream);
writer.write(image.getRenderedImage());
}
}
Escollos:
- Es lento como image io framework en general
- Falla inexplicablemente para algunas imágenes raras. Ejemplo (javax.imageio.IIOException: no es un archivo JPEG: comienza con 0xff 0xe2)
- Requiere usar el mismo modelo de color para las imágenes de origen y de destino. Como resultado, no puede usar la interpolación bilineal o bicúbica
Respondido 28 Oct 15, 23:10
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java parameters image-resizing exif or haz tu propia pregunta.
No, ¿qué es "exif"? Nunca he escuchado de eso. - Baruch Atta
Sí, eso es lo que necesito: Wikipedia: los datos Exif están incrustados en el archivo de imagen. Si bien muchos programas de manipulación de imágenes recientes reconocen y conservan los datos Exif cuando escriben en una imagen modificada, este no es el caso de la mayoría de los programas más antiguos. - Baruch Atta
Encontré drawnoakes.com/code/exif - extracción de metadatos en java. Probaré este paquete y te dejaré saber... - Baruch Atta
No, eso es solo para extraer/leer. Ahora encontré esto: paquete org.apache.sanselan - Baruch Atta