# Metadaten von Bildern auslesen und verändern



## Allrounder93 (19. Mrz 2014)

Moin,

ich würde gerne an meinen Bildern (jpg,png,...) die Metadateien auslesen und nach gegebenen Kriterien ändern... 
Bei Goolge und hier im Forum finde ich viele Beiträge des letzten Jahrzehnts dazu, aber viele davon enden in leeren Aussagen...

Ich kann "ImageIO" nutzen, wenn ich mich nicht ganz irre! Gibt es inzwischen eine bessere Methoden? Da ich bei ImageIO angeblich für jedes Format einen neuen Algorithmus schreiben muss?!

Eigentlich brauche ich nur eine Methode, der ich den Namen des Metawertes übergebe und einen Wert. 
getMeta(File Image, String MetaTyp, String MetaValue)
Wenn MetaValue leer ist, bekomme ich den Wert des MetaTyp’s und wenn MetaValue ein Wert besitzt, wird dieser für den MetaTyp gespeichert an der Datei


----------



## Highchiller (20. Mrz 2014)

Das was du suchst nennt sich Exif-Tags. Diese enthalten alle Informationen über (Metadaten) zu einem Bild. Dieser Tag steht meist am Anfang einer Datei und ist nach ganz bestimmten Regeln aufgebaut.

Hier findest du diese Regeln:
EXIF Tags

Was du jetzt tun musst um das in deiner Bilddatei auszulesen ist relativ simpel. Du ließt deine Datei als Bytes aus und schaust ob es sich grad um einen von den Tags handelt. Der Wert ist im Hexadezimalcode angegeben (Tag ID). Das Problem ist, in der Regel sind diese nicht in der richtigen Reihenfolge eingetragen. Dann schauste in der Tabelle was für werte der annehmen kann, ließt das aus, fertig.

Für Bilder hab ich das noch nie gemacht aber für MP3-Dateien schon. Daher weiß ich nicht wie es hier im Detail geht. Aber im groben läuft es immer so wie oben beschrieben. Und mit der richtigen Bezeichung und der Tabelle oben kommste sicher schon nen gutes Stück vorran


----------



## Allrounder93 (21. Mrz 2014)

Wenn ich das richtig verstehe muss ich dafür Bibiliken einbinden oder wie funktioniert dies?
Kann du dazu evtl. einen beipsielcode posten? Damit man ins Thema findet


----------



## Highchiller (23. Mrz 2014)

Hallöle, ok ist doch komplexer als sone MP3-Datei. Bei einem Image wird anscheind alles komprimiert, einschließlich des Tags. Daher kommt man da nicht ohne weiteres ran. Aber es gibt ja zum Glück einige Wrapper die dabei helfen. Zum Beispiel der ImageReader aus javax.imageio.

Hier gibts eine Erklärung für unterschiedliche herangehensweisen:
Read image meta data with java.

Und hier eine kompilierbares Beispiel für die erste Variante mit dem ImageReader von Java-Intern:
Obtaining image metadata.

Man sieht also, dass die meta-information nicht nur schwer zu bekommen sind, obendrein sind sie auch noch in einer baumhirarchie gespeichert. Mit dem ausführbaren code von oben wird dir aber sicher einiges klarer werden.

Grüße
Highchiller


----------



## Allrounder93 (24. Mrz 2014)

Haaa! Danke :applaus:

Jedoch scheitere ich gerade daran, dass ich die .jar nicht richtig eingebunden bekomme!

Ich bin wie folgt vor gegangen:

Download Downloads - metadata-extractor - Extracts Exif, IPTC, XMP, ICC and other metadata from image files - Google Project Hosting -> metadata-extractor-2.6.4-src.jar 	
 Drog & Drop in mein Projekt gezogen
 In Eclipse unter Java Build Path -> add JARs d
 In meiner Classe nun import Source.com.*; beigefügt
 Code beispiel unter GettingStarted - metadata-extractor - Sample code to get you started - Extracts Exif, IPTC, XMP, ICC and other metadata from image files - Google Project Hosting ausprobiert...
 Jedoch erkennt Eclipse immernoch nicht das Element "Metadata metadata = ImageMetadataReader.readMetadata(jpegFile);"

Was mache ich falsch?


----------



## Highchiller (3. Apr 2014)

Hmm... sorry dass es so lange gedauert hat. Allerdings musst du eigentlich keine Jar-Einbinden... Verwende doch mal Java7 als SDK. Eventuell ist das bei älteren Versionen noch nicht enthalten, wer weiß 

Bei mir läuft es mit JRE7 tadellos. Außer das viele der neuen JPEG Bilder nicht mehr diese Meta-Data version unterstützen und er meckert die Datei hätte keine JFIF.
Jedenfalls haben alle GIF bilder funktioniert.


----------

