Necesito tomar una foto, conocer su orientación, dibujarla en el lienzo y rotar el lienzo. Necesito ayuda para encontrar la orientación de la fotoAndroid - Encuentra la orientación de la foto tomada por la cámara
Respuesta
Es necesario utilizar la etiqueta EXIF incrustada en la foto:
private int getExifOrientation() {
ExifInterface exif;
int orientation = 0;
try {
exif = new ExifInterface(mImagePath);
orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);
} catch (IOException e) {
e.printStackTrace();
}
Log.d(TAG, "got orientation " + orientation);
return orientation;
}
Sin embargo, el valor real devuelto EXIF es sorta raro. Permite toda variedad de rotación y espejado. La mejor referencia que he encontrado es here. En general, después de obtener la orientación, tendrá que ejecutar a través de una función de búsqueda para obtener la rotación en grados:
private int getBitmapRotation() {
int rotation = 0;
switch (getExifOrientation()) {
case ExifInterface.ORIENTATION_ROTATE_180:
rotation = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_90:
rotation = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
rotation = 270;
break;
}
return rotation;
}
¿Se puede determinar la orientación en función de la altura y el ancho de la foto? Si es más ancho que alto, es paisaje. Si es más alto que ancho, es retrato.
Si es cuadrado, entonces tendrías que leer los datos EXIF y con suerte está configurado para esas imágenes. Los datos EXIF deben proporcionar datos de orientación.
No, tienen el mismo ancho y alto – StoneHeart
Las dimensiones no son suficientes, puede ser un paisaje pero al revés, dependiendo de si giré el teléfono hacia la izquierda o hacia la derecha para tomar la fotografía. –
que estaba buscando una solución similar a mi problema. Estoy sacando una foto de una cámara o galería y convirtiéndola en un mapa de bits para usar en mi aplicación. El problema era que las fotos tomadas en PORTRAIT se estaban girando -90 grados.
Buscando respuestas He encontrado este post y https://stackoverflow.com/a/11081918/3062284 que son muy similares. De hecho, utilicé la última publicación. Sin embargo, al igual que @StoneHeart, recibí un error al leer la ruta de la imagen.
yo estaba usando este código en mi onActivityResult():
case CAMERA_REQUEST_CODE:
if (resultCode == RESULT_OK);
uriImage = data.getData();
ExifInterface exif = new ExifInterface(uriImage.getPath());
Dado que este error no se abordó en los comentarios anteriores que pensé que iba a compartir la solución que encontré usando https://stackoverflow.com/a/10564727/3062284
que necesitaba el verdadero ruta para el archivo utilizando este método desde la publicación.
private String getRealPathFromURI(Uri contentUri) {
String[] proj = { MediaStore.Images.Media.DATA };
CursorLoader loader = new CursorLoader(this, contentUri, proj, null, null, null);
Cursor cursor = loader.loadInBackground();
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
y editar mi código a la siguiente:
case CAMERA_REQUEST_CODE:
if (resultCode == RESULT_OK);
uriImage = data.getData();
String imagePath = getRealPathFromURI(uriImage);
ExifInterface exif = new ExifInterface(imagePath);
y que fija el "jhead no puede abrir archivo" error que estaba recibiendo.
¡Boom acaba de terminar mi problema de 2 horas! –
La mejor solución para el problema de JHead – rookieDeveloper
- 1. obtener la última foto tomada por el usuario
- 2. La orientación de foto capturada está cambiando en android
- 3. Orientación de la cámara en Android
- 4. La foto tomada con la cámara no contiene ningún metadato ALAsset
- 5. Obtener imagen Uri + miniatura de la imagen tomada con la cámara en Android
- 6. Algoritmo para detectar la orientación de la foto
- 7. La cámara Android se congela después de tomar una foto
- 8. ¿Cómo puedo encontrar la orientación de una imagen tomada con Intent MediaStore.ACTION_IMAGE_CAPTURE?
- 9. Reinicio de la actividad de Android después de tomar una foto (¿orientación?)
- 10. Orientación de imagen de la cámara
- 11. Intento de la cámara que no guarda la foto
- 12. iPhone AVFoundation orientación de la cámara
- 13. Uso de la cámara con orientación vertical
- 14. iPhone: tome la foto con la cámara frontal programáticamente
- 15. orientación Android - problemas con las intenciones (cámara)
- 16. orientación de retrato de cámara para Android
- 17. no terminando la actividad al pasar la imagen de la matriz de bytes tomada por la cámara
- 18. Orientación de cámara/imagen en Android
- 19. Android Camera Preview - Cómo congelar la cámara?
- 20. Subir una foto desde la cámara al servidor PHP
- 21. Detección de color con la cámara Android
- 22. Enfrentando el problema de orientación con la imagen capturada de la cámara en los teléfonos Android
- 23. Android, cámara frontal y trasera Orientación, paisaje
- 24. Android calidad de la cámara personalizada
- 25. Problema de orientación de la imagen de Android con actividad de cámara personalizada
- 26. Tome la foto de la cámara web utilizando la línea de comandos de linux (bash)
- 27. La imagen resultante de la cámara Android debe girarse después de la captura?
- 28. Cómo comprimir una imagen tomada por la cámara en iphone sdk?
- 29. Lectura de código de barras utilizando una imagen tomada con la cámara del teléfono móvil
- 30. Android - Previsualización de la cámara
Recibí el error "01-11 00: 51: 37.687: ERROR/JHEAD (7055): no puedo abrir '/file:/mnt/sdcard/.temp/photo1151619024.jpg'" en esa línea "exif = new ExifInterface (mImagePath); " – StoneHeart
Estoy seguro de que el archivo todavía está allí y ya configuré el permiso android.permission.WRITE_EXTERNAL_STORAGE en el manifiesto – StoneHeart
/file:/no se ve como una parte adecuada de la ruta ... probablemente sea solo/mnt/sdcard/... – elijah