2010-02-24 29 views
7

Tôi đang sử dụng lớp android.hardware.Camera để chụp ảnh và tôi thấy rằng không có dữ liệu exif nào được lưu trữ trong các hình ảnh. Nếu tôi sử dụng ứng dụng máy ảnh trên DROID của tôi, tất cả dữ liệu exif sẽ được lưu.Sử dụng SDK Android Tôi không thấy bất kỳ EXIF ​​nào trong JPEG của mình

Tôi đã thử đặt xoay bằng Set() và SetRotation() để xem liệu tôi có thể lấy một số dữ liệu exif để hiển thị hay không. Khi tôi xem các hình ảnh trên máy tính xách tay của tôi với một đầu đọc exif nó cho tôi biết hình ảnh có NO dữ liệu exif.

Tôi đã xem một số bài đăng tương tự, nhưng tôi chưa tìm thấy giải pháp cho điều này. Có ai nhìn thấy vấn đề này với các điện thoại khác không?

Tôi đang sử dụng Android 2.0.1 SDK

+0

Vì vậy, đây là những gì tôi không hiểu. Khi tôi chụp ảnh bằng API máy ảnh, tôi đang mong đợi để có được một hình ảnh với dữ liệu EXIF ​​hiện tại. ImageData phải chứa tất cả thông tin từ máy ảnh như thế nào. Thời gian Phơi sáng, Số F, ISO, Tốc độ màn trập, v.v ... Tại sao thông tin này không được cung cấp khi sử dụng API Camera? – Travis

+0

Xem [Sanselan] (http: // stackoverflow.com/questions/4800235/how-to-attach-exif-siêu dữ liệu-to-a-serial-bitmap-in-android/5960878 # 5960878) thực hiện – Vikas

Trả lời

13

Vì vậy, sau một số nghiên cứu khác, tôi thấy rằng tôi đã mất thông tin EXIF ​​khi tôi sử dụng mã sau để lưu dữ liệu hình ảnh vào thẻ SD.

BitmapFactory.Options options=new BitmapFactory.Options(); 
options.inSampleSize = 0; 
Bitmap myImage = BitmapFactory.decodeByteArray(imageData, 0, imageData.length); 
FullFileName = sdImageMainDirectory.toString() + "/DCIM/Camera/" + getDateTime() + ".jpg"; 
fileOutputStream = new FileOutputStream(FullFileName); 
BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream); 
myImage.compress(CompressFormat.JPEG, quality, bos); 
bos.flush(); 
bos.close(); 

Tôi đã thay đổi mã ở trên để đơn giản như vậy và giờ đây tất cả dữ liệu EXIF ​​từ máy ảnh đều có mặt.

FileOutputStream file = new FileOutputStream(FileName); 
file.write(imageData); 
+0

cách bạn nhận byte [] imageData? – Taranfx

+1

bằng cách sử dụng api máy ảnh android trênPictureTaken trả về hình ảnh dưới dạng mảng byte http://developer.android.com/reference/android/hardware/Camera.PictureCallback.html – Travis

1

Nó xuất hiện từ bài viết như this rằng lớp camera không hỗ trợ dữ liệu EXIF, và các ứng dụng máy ảnh sử dụng thực hiện EXIF ​​riêng của mình.

Một tùy chọn sẽ là duyệt qua nguồn được đề cập trong chuỗi đó và xem liệu có bất kỳ điều gì bạn có thể sử dụng hay không.

Một tùy chọn khác sẽ là dự án sanselandandroid. Nhà phát triển admits rằng đó không phải là cổng hoàn hảo, nhưng nhà phát triển là người tham gia tích cực trong các nhóm Google trung tâm Android và bán phần mềm máy ảnh của mình Snap FX bao gồm ứng dụng có tên Camera FX giúp lưu dữ liệu EXIF ​​theo số product page.

Chúc may mắn.

Ảnh được lưu với thẻ EXIF ​​tương thích với hầu hết các ứng dụng chỉnh sửa phần mềm.

2

Cảm ơn scntln!

Tôi đang sử dụng điều này thực sự trong ứng dụng Camera FX của mình. Nó hoạt động tốt cho việc nhúng các thẻ EXIF ​​vào JPEGS (không phải trong các tệp PNG).

Android SDK phiên bản 2.x có lớp ExifInterface riêng mà bạn có thể sử dụng thay thế. Nhưng nếu bạn cần hỗ trợ 1.6 hoặc thấp hơn, thì cổng sanselandroid của tôi sẽ hoạt động tốt.

Tôi vẫn đang trong quá trình cắt bớt dự án sanselanandroid để chỉ chứa những gì thực sự cần thiết để chỉ viết các thẻ EXIF.

BTW: Tôi nhận thấy ở đây tôi viết 'tương thích' không chính xác. Sửa lỗi đó trên blog của tôi :)

Các vấn đề liên quan