Existe-t-il une bibliothèque Java pour faire pivoter les fichiers JPEG par incréments de 90 degrés, sans dégradation de l'image?JPEG sans perte Rotation (90/180/270 degrés) en Java?
Répondre
Je trouve ceci: http://mediachest.sourceforge.net/mediautil/
API: http://mediachest.sourceforge.net/mediautil/javadocs/mediautil/image/jpeg/LLJTran.html
très propre, bonne trouvaille! –
@Henry hey s'il vous plaît pourriez-vous me dire comment puis-je enregistrer l'image en utilisant ceci .. apparemment ce poste ne m'aide pas ou je fais le mauvais chemin – therealprashant
Vous n'avez pas besoin d'une bibliothèque externe pour ce genre de chose, il est tout construit en SE. La plus simple étant la fonction rotate() de l'objet Graphics2D.
Par exemple:
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();
aucune perte! Ou, si vous voulez faire très attention, utilisez simplement BufferedImage.getRGB (x, y) et traduisez-le pixel par pixel sur la nouvelle image.
Ce ne serait pas lossles, comme vous auriez à décoder et à re encoder l'image, ce qui entraînera une perte de données. Les images JPEG peuvent être pivotées sans perte par pas de 90 degrés lorsqu'elles sont effectuées correctement. –
C'est bien pour PNG/GIF, je suppose, mais pas sans perte de JPEG malheureusement. – Henry
Je ne comprends pas pourquoi vous diriez que ce n'est pas sans perte? Surtout si vous faites cette opération pixel par pixel? –
Miser sur la réponse de Henry, voici un exemple de la façon d'utiliser MediaUtil pour effectuer la rotation JPEG sans perte en fonction des données 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
...
}
J'ai effectué un test avec la récupération de la balise de rotation EXIF avec Sanselan et MediaUtil, mais l'approche MediaUtil ci-dessus échoue pour moi au llj.getImageInfo(); step (ne trouvant aucune métadonnée EXIF), où l'approche Sanselan trouve les métadonnées EXIF. Il semble que LLJtran ne supporte pas la lecture de tous les fichiers JPEG modernes. – JeroenHoek
Je ne suis pas en mesure d'afficher l'image enregistrée dans ma galerie..tried exactement le même code .. – therealprashant
J'ai des difficultés à trouver où importer java.awt.Rectangle; J'ai essayé quelques pots dans le web mais je ne peux pas les utiliser avec Android Studio. Pouvez-vous m'aider avec le pot que vous avez importé. Remerciements –
En ce qui concerne la question des données EXIF pas nécessairement être manipulé correctement, car les données EXIF est dénué de pertinence dans de nombreuses situations, voici un exemple de code montrant que la fonction de rotation JPEG sans perte LLJTran (remerciements à 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 vous faites l'entrée et de sortie File
objets REFE r dans le même fichier, vous pouvez l'exécuter encore et encore, et observer que l'image ne se dégrade pas, quel que soit le nombre d'itérations.
Je ne suis pas en mesure de sauvegarder l'image et de le voir dans la galerie en utilisant cette méthode ... S'il vous plaît aider – therealprashant
- 1. UIImage Rotation degrés personnalisés
- 2. Rotation des fichiers JPEG dans .NET avec une perte de qualité minimale
- 3. image rotation 10 degrés coupé
- 4. Rotation de deux UIImageViews 360 degrés
- 5. JPEG ou autre bibliothèque de compression d'images avec perte requise
- 6. Rotation 3D en OpenGL et rotation locale
- 7. java pgm 2 jpeg/png
- 8. Fusion sans perte de fichiers PDF (PHP)
- 9. Bibliothèque pour la conversion d'image sans perte
- 10. Convertir IplImage en JPEG sans utiliser CvSaveImage dans OpenCV
- 11. Écrire des métadonnées dpi à une image jpeg en Java
- 12. Pourquoi Java ImageIO aplatit les couleurs JPEG
- 13. Transcodage d'image (JPEG vers PNG) avec Java
- 14. Rotation d'un NSImage avec ou sans NSAffineTransform
- 15. Comment afficher le texte vertical (rotation de 90 degrés) dans tous les navigateurs?
- 16. Modification des en-têtes JPEG en C#
- 17. problème de rotation opengl
- 18. Vous effectuez une transformation NSMutableString sans perte de mémoire?
- 19. Rotation mathématiques d'image (C#)
- 20. OpenGL Rotation
- 21. iPhone Orientation Exprimé en rotation
- 22. Où puis-je trouver un algorithme de compression sans perte, qui produit des sorties sans en-tête?
- 23. Échelle/Rotation d'un bouton dans l'interface
- 24. JAI Changer la résolution JPEG
- 25. Conversion de fichiers PDF en JPEG sans leur ombre portée/chanfrein
- 26. Comment trouver l'angle de rotation de l'iphone?
- 27. Android 1.6 Rotation de l'appareil photo?
- 28. Comment extraire l'angle de rotation d'un QTransform?
- 29. Dimension conservant la conversion JPEG en EPS
- 30. Rotation d'une image à l'aide de css
pas en Java, mais http://jpegclub.org/jpegtran/ devrait être le meilleur utilitaire de ligne de commande pour la rotation sans perte jpeg (Windows/Linux) – Henry
Bonjour si vous avez utilisé la solution ci-dessous, je voudrais demander votre aide si vous pouvez. J'ai des difficultés à trouver où importer java.awt.Rectangle; J'ai essayé quelques pots dans le web mais je ne peux pas les utiliser avec Android Studio. Pouvez-vous m'aider avec le pot que vous avez importé. Merci –