14

Javaコードを使用してローカルシステムの画像ファイルからメタデータを取得したい

添付の画像では、Javaコードから取得したいデータを確認できます。

ここに画像の説明を入力してください

私は以下のコードを書きましたが、「詳細」タブに記載されているデータをプルしていないようです。以下のコードの出力はであり、これは私が探しているものではありません。

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

あなたの考えを教えてください。ありがとう

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();
        }
4

3 に答える 3

16

JavaCoreAPIを使用してそれを行う簡単な方法はありません。画像のメタデータツリーを解析し、適切なEXIFタグを解釈する必要があります。代わりに、EXIF解析機能を備えた既存のライブラリから必要なコードを取得し、それを自分のライブラリで使用できます。たとえば、私はのImageクラスを使用しましたjavaxt。これは、画像からGPSメタデータを抽出するための非常に便利な方法を提供します。それは次のように簡単です:

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

さらに、javaxt.io.Image外部依存関係がないため、ライブラリ全体に依存関係を追加したくない場合は、その特定のクラスを使用できます。

于 2012-08-24T19:03:03.443 に答える
9

画像のEXIFヘッダーを読んでから、タグを解析してGPS情報を見つけることをお勧めします。Javaには、EXIFヘッダーを抽出および解析するための優れたライブラリ(metadata-extractorと呼ばれる)があります。このライブラリの開始方法については、こちらをご覧ください。

チュートリアルの最初の2つの手順を実行したら、[GPS][GPS] GPS Longitude、、、[GPS] GPS Latitude...)で始まるタグを探します。

于 2012-08-24T18:44:02.880 に答える
0

@ dan-dの回答に基づいて、これが私のコードです(kotlin)

private fun readGps(file: String): Optional<GeoLocation> {
    // Read all metadata from the image

    // Read all metadata from the image
    val metadata: Metadata = ImageMetadataReader.readMetadata(File(file))
    // See whether it has GPS data
    val gpsDirectories = metadata.getDirectoriesOfType(
            GpsDirectory::class.java)
    for (gpsDirectory in gpsDirectories) {
        // Try to read out the location, making sure it's non-zero
        val geoLocation = gpsDirectory.geoLocation
        if (geoLocation != null && !geoLocation.isZero) {
            return Optional.of(geoLocation)
        }
    }
    return Optional.empty()
}
于 2020-03-27T03:14:44.167 に答える