¿Hay una biblioteca Java para rotar archivos JPEG en incrementos de 90 grados, sin incurrir en la degradación de la imagen?Lossless JPEG ¿Girar (90/180/270 grados) en Java?
Respuesta
encontré esto: http://mediachest.sourceforge.net/mediautil/
API: http://mediachest.sourceforge.net/mediautil/javadocs/mediautil/image/jpeg/LLJTran.html
muy limpio, gran hallazgo! –
@Henry hey por favor podría decirme cómo guardo la imagen usando esto ... aparentemente esta publicación no me está ayudando o estoy haciendo lo contrario – therealprashant
Usted no necesita una biblioteca externa para este tipo de cosas, es todo montado en SE. Lo más fácil es la función de rotación() del objeto Graphics2D.
Por ejemplo:
Image rotatedImage = new BufferedImage(imageToRotate.getHeight(null), imageToRotate.getWidth(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = (Graphics2D) rotatedImage.getGraphics();
g2d.rotate(Math.toRadians(90.0));
g2d.drawImage(imageToRotate, 0, -rotatedImage.getWidth(null), null);
g2d.dispose();
sin pérdida!
O, si quiere tener mucho cuidado, simplemente use BufferedImage.getRGB (x, y), y traduzca pixel por pixel a la nueva imagen.
Eso no sería desastroso, ya que tendría que decodificar y volver codificar la imagen, lo que dará como resultado la pérdida de datos. Los archivos JPEG pueden girar sin pérdida en pasos de 90 grados, cuando se realizan correctamente. –
Esto está bien para PNG/GIF, supongo, pero no sin pérdida de JPEG por desgracia. – Henry
No entiendo por qué diría que esto no es sin pérdidas? ¿Especialmente si está haciendo esta operación píxel por píxel? –
Sobre la base de la respuesta de Henry, aquí está un ejemplo de cómo utilizar MediaUtil para llevar a cabo la rotación JPEG sin pérdida basada en los datos EXIF:
try {
// Read image EXIF data
LLJTran llj = new LLJTran(imageFile);
llj.read(LLJTran.READ_INFO, true);
AbstractImageInfo<?> imageInfo = llj.getImageInfo();
if (!(imageInfo instanceof Exif))
throw new Exception("Image has no EXIF data");
// Determine the orientation
Exif exif = (Exif) imageInfo;
int orientation = 1;
Entry orientationTag = exif.getTagValue(Exif.ORIENTATION, true);
if (orientationTag != null)
orientation = (Integer) orientationTag.getValue(0);
// Determine required transform operation
int operation = 0;
if (orientation > 0
&& orientation < Exif.opToCorrectOrientation.length)
operation = Exif.opToCorrectOrientation[orientation];
if (operation == 0)
throw new Exception("Image orientation is already correct");
OutputStream output = null;
try {
// Transform image
llj.read(LLJTran.READ_ALL, true);
llj.transform(operation, LLJTran.OPT_DEFAULTS
| LLJTran.OPT_XFORM_ORIENTATION);
// Overwrite original file
output = new BufferedOutputStream(new FileOutputStream(imageFile));
llj.save(output, LLJTran.OPT_WRITE_ALL);
} finally {
IOUtils.closeQuietly(output);
llj.freeMemory();
}
} catch (Exception e) {
// Unable to rotate image based on EXIF data
...
}
He realizado una prueba para recuperar la etiqueta de rotación EXIF con Sanselan y MediaUtil, pero el enfoque anterior de MediaUtil me falla en llj.getImageInfo(); paso (sin encontrar ningún metadato EXIF), donde el enfoque de Sanselan encuentra los metadatos EXIF. Parece que LLJtran no es compatible con la lectura de todos los archivos JPEG modernos. – JeroenHoek
No puedo ver la imagen guardada en mi galería ... intenté exactamente el mismo código ... – therealprashant
Tengo dificultades para encontrar dónde importar java.awt.Rectangle; He intentado algunas jarras en la web pero no puedo usarlas con Android Studio. ¿Puedes ayudarme con el frasco que has importado? Gracias –
En cuanto a la cuestión de los datos EXIF no necesariamente se maneja correctamente, ya que los datos EXIF es irrelevante en muchas situaciones, esto es código de ejemplo que demuestra solamente la función de rotación LLJTran sin pérdida JPEG (con gracias a user113215):
final File SrcJPEG = new File("my-input.jpg");
final File DestJPEG = new File("my-output.jpg");
final FileInputStream In = new FileInputStream(SrcJPEG);
try {
final LLJTran LLJT = new LLJTran(In);
LLJT.read(LLJTran.READ_ALL, true);
LLJT.transform(LLJTran.ROT_90);
final FileOutputStream Out = new FileOutputStream(DestJPEG);
try {
LLJT.save(Out, LLJTran.OPT_WRITE_ALL);
} finally {
Out.close();
}
} finally {
In.close();
}
Si hace refe la entrada y salida de objetos File
r al mismo archivo, puede ejecutar esto una y otra vez, y observar que la imagen no se degrada, no importa cuántas iteraciones se realice.
No puedo guardar la imagen y verla en la galería con este método ... Por favor ayuda – therealprashant
- 1. Girar una página 180 grados en LaTeX
- 2. Imagen numpy - girar la matriz 270 grados
- 3. ¿Cómo puedo girar un UIImageView en 20 grados?
- 4. Cómo rotar mi aplicación 180 grados boca abajo al girar el dispositivo 180 grados al revés?
- 5. Girar una imagen en java
- 6. UIImage Rotation grados personalizados
- 7. Girar una sola página 90 grados con iTextSharp/VB en un PDF de varias páginas existente
- 8. Girar UIView iPhone
- 9. Girar texto para imprimir
- 10. cámara Android girar
- 11. IOS: girar una UIImageView
- 12. ¿La manera más fácil de girar 90 grados una imagen usando OpenCV?
- 13. Android - ¿Hay alguna manera de girar un pan tostado 90 grados?
- 14. Girar imagen matemáticas (C#)
- 15. "Girar" un IEnumerable <IEnumerable <T>> 90 grados
- 16. ¿Girar un rectángulo de Java Graphics2D?
- 17. CATransform3DRotate rotate para 360 grados
- 18. Girar una imagen usando css
- 19. forma única para girar la deg fondo 180, (no girar la fuente)
- 20. Java API para convertir JPEG a TIFF
- 21. Rotar archivos JPEG en .NET con pérdida mínima de calidad
- 22. Girar imagen en UIImageView
- 23. Girar imagen en android
- 24. Escribir metadatos de dpi en una imagen jpeg en Java
- 25. ¿Cómo puedo girar un png transparente en 45 grados usando imagemagick y mantener la nueva imagen transparente?
- 26. ¿Cómo giro una imagen en el dominio de la frecuencia?
- 27. Convertir de Grados decimales a Grados Minutos Segundos décimas.
- 28. conversión de página web en imagen jpeg usando java
- 29. Girar una vista de video de Android
- 30. Girar texto en IE, sin que se ponga feo
no en Java, pero http://jpegclub.org/jpegtran/ debe ser la mejor utilidad de línea de comandos para la rotación sin pérdida JPEG (Windows/Linux) – Henry
Hola si ha utilizado a continuación solución me gustaría solicitar su ayuda si usted puede. Tengo dificultades para encontrar dónde importar java.awt.Rectangle; He intentado algunas jarras en la web pero no puedo usarlas con Android Studio. ¿Puedes ayudarme con el frasco que has importado? Gracias –