[Java] Obtenez des métadonnées à partir de fichiers avec Apathce Tika, et obtenez la largeur et la hauteur des images / vidéos à partir des métadonnées [Kotlin]

Chose que tu veux faire

Obtenez la taille du cadre (largeur et hauteur) de l'image / vidéo.

Dans cet article, nous allons utiliser Apache Tika pour obtenir les métadonnées, puis obtenir la taille de l'image à partir de ces métadonnées.

excuses

Pour autant que j'ai lu le document officiel ci-dessus, la méthode introduite dans cet article ne peut prendre en charge que les formats d'image (+ jpeg dans la mesure où j'ai essayé) pris en charge par les plates-formes Java telles que png, gif, bmp et les vidéos au format flv, mp4. .. Cela ne change pas même si "Content-type" est traité comme "video / mp4", comme mov qui apparaît dans le résultat de l'exécution décrit plus loin.

Au cours de mes recherches, il semblait qu'il n'y avait presque aucun moyen d'obtenir la taille du cadre en Java jusqu'à présent (j'apprécierais si vous pouviez me le dire). Si vous voulez le faire sûrement, je pense qu'il serait préférable d'appeler ffmpeg depuis Java.

Méthode d'introduction

Présentez les analyseurs Apache Tika de Maven. J'ai utilisé 1.21 pour la vérification.

Apache Tika Parsers

Code de vérification

C'est un exemple approximatif, mais c'est un exemple pour obtenir la taille d'image pour tous les fichiers sous src / main / resources. Il est trié par extension et par sortie.

Le type org.apache.tika.metadata.Metadata est nommé car il est nommé type de métadonnées de Kotlin.

import org.apache.tika.Tika
import org.apache.tika.io.TikaInputStream
import java.io.File
import org.apache.tika.metadata.Metadata as TikaMetadata

fun main() {
    val tika = Tika()

    File(System.getProperty("user.dir") + "/src/main/resources").listFiles().filter {
        it.name != ".gitkeep"
    }.map {
        val metaData = TikaMetadata() //Si vous ne déclarez pas chaque fichier, les données jugées la dernière fois resteront indéfiniment.
        val tikaStream = TikaInputStream.get(it.toURI(), metaData)

        tika.parse(tikaStream, metaData)

        val fileInfo = """
            Extension: ${metaData.get("resourceName").split(".").last().toLowerCase()}
            Content-Type = ${metaData.get("Content-Type")}
        """.trimIndent()

        val width = metaData.get("tiff:ImageWidth") ?.let { w -> Integer.parseInt(w) }
        val height = metaData.get("tiff:ImageLength") ?.let { h -> Integer.parseInt(h) }

        """
            #$fileInfo
            #width: ${width?: "nothing" }
            #height: ${height?: "nothing"}
        """.trimMargin("#")
    }.sorted().forEach {
        println(it)
        println("----------------------")
    }
}

Résultat d'exécution

C'est le résultat de la mise en place des données récupérées dans le texto.

C'est long donc c'est plié
Extension: 7z
Content-Type = application/x-7z-compressed
width: nothing
height: nothing
----------------------
Extension: avi
Content-Type = video/x-msvideo
width: nothing
height: nothing
----------------------
Extension: docx
Content-Type = application/vnd.openxmlformats-officedocument.wordprocessingml.document
width: nothing
height: nothing
----------------------
Extension: exe
Content-Type = application/x-msdownload
width: nothing
height: nothing
----------------------
Extension: flv
Content-Type = video/x-flv
width: nothing
height: nothing
----------------------
Extension: gif
Content-Type = image/gif
width: 300
height: 250
----------------------
Extension: gif
Content-Type = image/gif
width: 300
height: 250
----------------------
Extension: gif
Content-Type = image/gif
width: 300
height: 250
----------------------
Extension: html
Content-Type = text/html; charset=Shift_JIS
width: nothing
height: nothing
----------------------
Extension: jpg
Content-Type = image/jpeg
width: 4608
height: 2592
----------------------
Extension: jpg
Content-Type = image/jpeg
width: 759
height: 1074
----------------------
Extension: m3u
Content-Type = text/plain; charset=windows-1252
width: nothing
height: nothing
----------------------
Extension: mkv
Content-Type = video/x-matroska
width: nothing
height: nothing
----------------------
Extension: mkv
Content-Type = video/x-matroska
width: nothing
height: nothing
----------------------
Extension: mkv
Content-Type = video/x-matroska
width: nothing
height: nothing
----------------------
Extension: mkv
Content-Type = video/x-matroska
width: nothing
height: nothing
----------------------
Extension: mov
Content-Type = application/mp4
width: 0
height: 0
----------------------
Extension: mov
Content-Type = application/mp4
width: 0
height: 0
----------------------
Extension: mov
Content-Type = video/quicktime
width: 0
height: 0
----------------------
Extension: mov
Content-Type = video/quicktime
width: 320
height: 240
----------------------
Extension: mp3
Content-Type = audio/mpeg
width: nothing
height: nothing
----------------------
Extension: mp4
Content-Type = application/mp4
width: 320
height: 240
----------------------
Extension: mp4
Content-Type = application/mp4
width: 640
height: 360
----------------------
Extension: mp4
Content-Type = application/mp4
width: 725
height: 408
----------------------
Extension: mp4
Content-Type = application/mp4
width: 725
height: 408
----------------------
Extension: mp4
Content-Type = video/mp4
width: 0
height: 0
----------------------
Extension: mp4
Content-Type = video/mp4
width: 0
height: 0
----------------------
Extension: mp4
Content-Type = video/mp4
width: 718
height: 404
----------------------
Extension: mp4
Content-Type = video/mp4
width: 720
height: 408
----------------------
Extension: mp4
Content-Type = video/mp4
width: 854
height: 480
----------------------
Extension: mp4
Content-Type = video/x-m4v
width: 725
height: 408
----------------------
Extension: mpg
Content-Type = video/mpeg
width: nothing
height: nothing
----------------------
Extension: mpg
Content-Type = video/mpeg
width: nothing
height: nothing
----------------------
Extension: mpg
Content-Type = video/mpeg
width: nothing
height: nothing
----------------------
Extension: msi
Content-Type = application/x-ms-installer
width: nothing
height: nothing
----------------------
Extension: pdf
Content-Type = application/pdf
width: nothing
height: nothing
----------------------
Extension: png
Content-Type = image/png
width: 600
height: 371
----------------------
Extension: pptx
Content-Type = application/vnd.openxmlformats-officedocument.presentationml.presentation
width: nothing
height: nothing
----------------------
Extension: svg
Content-Type = image/svg+xml
width: nothing
height: nothing
----------------------
Extension: ts
Content-Type = application/octet-stream
width: nothing
height: nothing
----------------------
Extension: vcmf
Content-Type = application/octet-stream
width: nothing
height: nothing
----------------------
Extension: vob
Content-Type = video/mpeg
width: nothing
height: nothing
----------------------
Extension: webm
Content-Type = video/webm
width: nothing
height: nothing
----------------------
Extension: webm
Content-Type = video/webm
width: nothing
height: nothing
----------------------
Extension: webm
Content-Type = video/webm
width: nothing
height: nothing
----------------------
Extension: webm
Content-Type = video/webm
width: nothing
height: nothing
----------------------
Extension: wmv
Content-Type = video/x-ms-wmv
width: nothing
height: nothing
----------------------
Extension: zip
Content-Type = application/zip
width: nothing
height: nothing
----------------------

Recommended Posts

[Java] Obtenez des métadonnées à partir de fichiers avec Apathce Tika, et obtenez la largeur et la hauteur des images / vidéos à partir des métadonnées [Kotlin]
[Java] Obtenir le jeu de caractères avec Apathce Tika / Initialiser la chaîne à partir du jeu de caractères [Kotlin]
[Java] Récupère MimeType à partir du contenu du fichier avec Apathce Tika [Kotlin]
[Java] Analyser les fichiers Excel (non limités à divers) avec Apathce Tika [Kotlin]
[Kotlin] Obtenez le constructeur / la méthode Java de KFunction et appelez-le
[Java] Lecture et écriture de fichiers avec OpenCSV
[Java] Obtenir des informations sur les balises à partir de fichiers musicaux
[Kotlin] Supprimer les fichiers en double [Java]
Assemblage inversé / fichier .class de compilation inverse compilé à partir de Kotlin
[Java] Obtenir KFunction à partir de la méthode / du constructeur en Java [Kotlin]
[Review] Lecture et écriture de fichiers avec java (JDK6)
[Développement Android] Obtenez des images du serveur avec Java et définissez-les dans ImageView! !!
Appeler une méthode avec le bloc de rappel de Kotlin depuis Java
Langage Java du point de vue de Kotlin et C #
Je veux faire des transitions d'écran avec kotlin et java!
[Java] Développement avec plusieurs fichiers en utilisant package et import