Tôi cần chụp ảnh, tìm hướng của nó, vẽ nó lên canvas và xoay khung hình. Tôi cần trợ giúp để tìm hiểu hướng của ảnhAndroid - Tìm hướng của ảnh đã được chụp bởi máy ảnh
Trả lời
Bạn cần phải sử dụng thẻ EXIF nhúng trong bức ảnh:
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;
}
Tuy nhiên, giá trị thực tế EXIF trở là sorta kỳ lạ. Nó cho phép cho tất cả các loại quay và phản chiếu. Tham chiếu tốt nhất tôi đã tìm thấy là here. Nói chung, sau khi bạn nhận được hướng, bạn sẽ muốn chạy thông qua chức năng tra cứu để xoay vòng theo độ:
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;
}
Bạn có thể xác định hướng dựa trên chiều cao và chiều rộng của ảnh không? Nếu nó rộng hơn nó cao, đó là phong cảnh. Nếu nó cao hơn nó rộng, nó là bức chân dung.
Nếu hình vuông, thì bạn sẽ phải đọc dữ liệu EXIF và hy vọng nó được đặt cho những hình ảnh đó. Dữ liệu EXIF sẽ cung cấp dữ liệu định hướng.
Không, chúng có cùng chiều rộng và chiều cao – StoneHeart
Kích thước không đủ - có thể là cảnh quan nhưng lộn ngược, tùy thuộc vào việc tôi đã bật điện thoại sang trái hay phải để chụp ảnh. –
Tôi đang tìm kiếm giải pháp tương tự cho vấn đề của mình. Tôi đang chụp ảnh từ máy ảnh hoặc thư viện và biến nó thành một bitmap để sử dụng trong ứng dụng của tôi. Vấn đề là các bức ảnh chụp trong PORTRAIT đã được xoay -90 độ.
Tìm kiếm câu trả lời Tôi đã tìm thấy bài đăng này và https://stackoverflow.com/a/11081918/3062284 rất giống nhau. Tôi thực sự đã sử dụng bài đăng sau. Tuy nhiên, như @StoneHeart tôi đã gặp lỗi khi đọc Đường dẫn hình ảnh.
tôi đã sử dụng mã này trong onActivityResult của tôi():
case CAMERA_REQUEST_CODE:
if (resultCode == RESULT_OK);
uriImage = data.getData();
ExifInterface exif = new ExifInterface(uriImage.getPath());
Kể từ khi lỗi này được không được đề cập trong ý kiến trước đó tôi nghĩ tôi sẽ chia sẻ những giải pháp tôi tìm thấy bằng https://stackoverflow.com/a/10564727/3062284
tôi cần thực đường dẫn cho tệp bằng phương thức này từ bài đăng.
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);
}
và chỉnh sửa mã của tôi như sau:
case CAMERA_REQUEST_CODE:
if (resultCode == RESULT_OK);
uriImage = data.getData();
String imagePath = getRealPathFromURI(uriImage);
ExifInterface exif = new ExifInterface(imagePath);
và cố định "JHEAD không thể mở tập tin" lỗi tôi đã nhận được.
Bùng nổ bạn vừa kết thúc vấn đề 2 giờ của tôi! –
Giải pháp tốt nhất cho vấn đề JHead – rookieDeveloper
- 1. Hướng chụp ảnh được chụp đang thay đổi trong android
- 2. Máy ảnh mặt trước của Android Chụp ảnh ngược
- 3. Hình ảnh kết quả của máy ảnh Android phải được xoay sau khi chụp?
- 4. Android tự động cắt máy ảnh chụp ảnh
- 5. Android xoay ảnh 90 độ (chụp bằng máy ảnh)
- 6. Hướng máy ảnh trên Android
- 7. Hướng chụp ảnh máy ảnh trên các thiết bị Samsung trong android
- 8. hướng chân dung máy ảnh android
- 9. Sự cố định hướng máy ảnh Android
- 10. Làm thế nào để nén một hình ảnh được chụp bởi máy ảnh trong sdk iphone?
- 11. Cách chụp ảnh thô từ máy ảnh android
- 12. Android - Chụp ảnh
- 13. Tôi làm cách nào để tìm hướng của ảnh được chụp bằng Intent MediaStore.ACTION_IMAGE_CAPTURE?
- 14. Cách chụp ảnh và lưu hình ảnh bằng Máy ảnh Android gốc
- 15. lấy ảnh cuối cùng được chụp bởi người dùng
- 16. Xem trước máy ảnh Android - Cách 'đóng băng' máy ảnh?
- 17. Chụp ảnh màn hình của Android OpenGL
- 18. Kích thước hình ảnh được hỗ trợ bởi máy ảnh Android
- 19. Android: Có thể chụp ảnh bằng máy ảnh không có giao diện người dùng không
- 20. Cách chụp ảnh từ máy ảnh trên Trình giả lập Android?
- 21. Android Giảm kích thước của máy ảnh Ảnh
- 22. Máy ảnh trong Android
- 23. Vấn đề định hướng hình ảnh Android với hoạt động máy ảnh tùy chỉnh
- 24. không hoàn thành hoạt động khi chuyển ảnh của mảng byte được chụp bằng máy ảnh
- 25. Ảnh chụp màn hình OpenGL Android
- 26. Siêu dữ liệu truy cập (thẻ exif) của hình ảnh được chụp bởi UIImagePickerController - iOS/iPhone
- 27. Android: Hướng xem trước máy ảnh ở chế độ dọc
- 28. Chụp ảnh từ máy ảnh thành dạng hoặc html5 canvas
- 29. Cách sử dụng Máy ảnh để chụp ảnh trong nền Dịch vụ trên Android?
- 30. hướng Android - các vấn đề có ý định (máy ảnh)
Tôi gặp lỗi "01-11 00: 51: 37.687: ERROR/JHEAD (7055): không thể mở '/file:/mnt/sdcard/.temp/photo1151619024.jpg'" tại dòng đó "exif = new ExifInterface (mImagePath); " – StoneHeart
Tôi chắc chắn rằng tập tin vẫn còn đó và tôi đã thiết lập cho phép android.permission.WRITE_EXTERNAL_STORAGE trong manifest – StoneHeart
/file:/không giống như một phần thích hợp của đường dẫn ... có lẽ chỉ là/mnt/sdcard/... – elijah