2012-08-24 47 views
9

Tôi muốn lấy siêu dữ liệu từ tệp hình ảnh trong hệ thống cục bộ của mình bằng mã JavaNhận dữ liệu GPS từ hình ảnh Mã Java

Trong hình ảnh đính kèm, bạn có thể xem dữ liệu mong muốn mà tôi muốn lấy từ mã java.

enter image description here

tôi đã viết đoạn code dưới đây và dường như không kéo dữ liệu được đề cập trong "Details" tab. Đầu ra của mã dưới đây và đây không phải là những gì tôi tìm kiếm.

Started .. 
Format name: javax_imageio_jpeg_image_1.0 
Format name: javax_imageio_1.0 

Hãy cho tôi ý tưởng của bạn. Cảm ơn

try { 
      ImageInputStream inStream = ImageIO.createImageInputStream(new File("D:\\codeTest\\arun.jpg")); 
      Iterator<ImageReader> imgItr = ImageIO.getImageReaders(inStream); 

      while (imgItr.hasNext()) { 
       ImageReader reader = imgItr.next(); 
       reader.setInput(inStream, true); 
       IIOMetadata metadata = reader.getImageMetadata(0); 

       String[] names = metadata.getMetadataFormatNames(); 
       int length = names.length; 
       for (int i = 0; i < length; i++) { 
        System.out.println("Format name: " + names[ i ]); 
       } 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
+2

Bằng cách nào mã của bạn không phù hợp với yêu cầu của bạn? Vui lòng nêu rõ vấn đề của bạn. – Keppil

+0

Đã chỉnh sửa câu hỏi của tôi. Hy vọng rằng sẽ cung cấp cho u ý tưởng nhiều hơn về những gì tôi tìm kiếm :-) – Arun

Trả lời

9

Không có dễ dàng cách nào đó để làm điều đó với API lõi Java. Bạn sẽ phải phân tích cú pháp cây siêu dữ liệu của hình ảnh và diễn giải các thẻ EXIF ​​thích hợp. Thay vào đó, bạn có thể lấy mã yêu cầu từ thư viện hiện có với khả năng phân tích cú pháp EXIF ​​và sử dụng nó trong máy của bạn. Ví dụ, tôi đã sử dụng lớp Image của javaxt, cung cấp một phương pháp rất hữu ích để trích xuất siêu dữ liệu GPS từ một hình ảnh. Nó cũng đơn giản như:

javaxt.io.Image image = new javaxt.io.Image("D:\\codeTest\\arun.jpg"); 
double[] gps = image.getGPSCoordinate(); 

Plus, javaxt.io.Image không có người phụ thuộc bên ngoài, vì vậy bạn chỉ có thể sử dụng lớp học đặc biệt nếu bạn không muốn thêm một sự phụ thuộc vào toàn bộ thư viện.

+0

Trả lời tốt đẹp! Rất hữu dụng !!! Cảm ơn rất nhiều !! – Arun

+0

Ý kiến ​​của tôi là javaxt giống như một hình ảnh xử lý và cho việc áp dụng các hoạt động. Bộ giải nén siêu dữ liệu dùng để trích xuất thông tin tiêu đề có thể phù hợp hơn. –

6

Tôi khuyên bạn nên đọc tiêu đề EXIF ​​của hình ảnh và sau đó phân tích cú pháp thẻ để tìm thông tin GPS. Trong Java có một thư viện tuyệt vời (được gọi là siêu dữ liệu-extractor) để trích xuất và phân tích cú pháp tiêu đề EXIF. Vui lòng xem phần bắt đầu cho thư viện này here.

Khi bạn thực hiện 2 bước đầu tiên trong hướng dẫn, hãy tìm các thẻ bắt đầu bằng [GPS] ([GPS] GPS Longitude, [GPS] GPS Latitude, ...).

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