Der Begriff "Tags" (ausgesprochen [täks]) kommt aus dem Englischen und bedeutet "Schlagwort" oder "Etikett". Tags werden genutzt, um Medieninhalte mittels Schlagworten (=Tags) zu kategorisieren. Suchmaschinen können Inhalte finden (=Retrieval) nur gefunden werden, wenn die Inhalte (= Dateien) mit entsprechenden Schlagwörtern verbunden werden. Oft werden diese Schlagworte uach als "Metadaten" bezeicnet
1983_ATS_D6_BMW_Winkelhock_USA East_.jpg
Für die Photos habe ich folgenden Kategorien verwendet:
Jahr, Land, Strecke, Team, Autoname, Motor, Fahrername, Vorname, Zuatzinfos
Die TAGS kann man in einer DB abspeichern, und die Bilder durchnummerieren. Ich habe die TAGs in den Filenamen codiert. Falls das Bild kein Fahrzeug zeigt können
einige TAGs im Filenamen entfallen. Falls mehrere Fahrer oder Personen zu sehen sind, werden Name, Vorname wiederholt verwendet. Beispiele:
![]() |
1961_Monaco_Monte Carlo_Porsche_787_Porsche 547-3 F4_Bonnier_Jo.jpg |
![]() |
1962_Belgium_Spa-Francorchamps_Clark_Jim.jpg |
![]() |
1982_USA West_Long Beach_Lauda_Niki_Rosberg_Keke_Villeneuve_Gilles_Podium.jpg |
Die Photos aus dem Schlegelmilch Archiv haben eine spezielle Herausforderung mit sich gebracht - sie waren durchnumeriert und die Information steckten im JPEG File in spezielen TAGs.
Es gibt neben dem IPTC Tags noch weitere Metadaten in Bilddateien, die speziell von und für Kamerahersteller sind (EXIF). Unter MacOS kann man sich die Tags anzeigen lassen, die Vorschau App hat entsprechende Features:
import com.drew.imaging.ImageMetadataReader;
import com.drew.imaging.ImageProcessingException;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.Tag
public static String ListIptcTags(String PATH) {
String caption="";
try
{ File file = new File(PATH);
Metadata metadata = ImageMetadataReader.readMetadata(file); // Laden Metadaten aus der JPEG-Datei
for (Directory directory : metadata.getDirectories()) { // Durchlaufen aller Verzeichnisse und Tags in den Metadaten
for (Tag tag : directory.getTags()) {
System.out.println( directory.getName()+" : "+ tag.getTagName() +":" +tag.getDescription());
if (directory.getName().startsWith("IPTC")) // Überprüfen ob das Verzeichnis IPTC-Daten enthält
{ String TagName = tag.getTagName(); // Ausgabe Caption / Abstract
if(( TagName.equals("Caption/Abstract") ) )
caption = tag.getDescription();
}
}
}
}
catch (IOException | ImageProcessingException e) { e.printStackTrace(); }
return (caption);
}
Um Tags zu schreiben, hier die Tags aus dem Namen der Datei in das Keyword IPTC Tag der jpeg Datei, ist die Methode mit mehr Boilerplate Code versehen.
Sie löscht in einer Kopie erst alle Tags und schreibt in einer zweiten temporären Datei die Ddaten indas Keyword Tag hinein, bevor sie die temporäre Datei abschliessend
umbenennt. Sie sieht dann folgendermassen aus:
import org.apache.commons.imaging.ImageReadException;
import org.apache.commons.imaging.ImageWriteException;
import org.apache.commons.imaging.formats.jpeg.iptc.*;
public static void WriteIptcTags(String PATH) throws IOException, ImageWriteException, ImageReadException {
String PATH1=PATH.replace(".","tmp.");
String PATH2=PATH.replace(".","NEU.");
InputStream In = new FileInputStream(PATH);
OutputStream Out = new FileOutputStream(PATH1);
InputStream In2 = new FileInputStream(PATH1);
OutputStream Out2 = new FileOutputStream(PATH2);
new JpegIptcRewriter().removeIPTC(In,Out,true); // Löschen aller IPTC Tags (ausser 2)
String token[] = PATH.split("/");
String fname = token[token.length-1];
String Year = years(fname);
String Team = team(fname);
String Car = car(fname);
String Engine = engine(fname);
String Driver = driver(fname);
String Country = race(fname);
List<IptcRecord> records = new ArrayList<>();
List<IptcBlock> rawBlocks = new ArrayList<>();
records.add(new IptcRecord(IptcTypes.KEYWORDS,"" + Year + " , "+Team+ " , "+Car+ " , "+Engine+ " , "+Driver+ " , "+Country));
records.add(new IptcRecord(IptcTypes.IMAGE_TYPE,"JPG"));
new JpegIptcRewriter().writeIPTC(In2, Out2, new PhotoshopApp13Data(records, rawBlocks));
In.close();
In2.close();
Out.close();
Out2.close();
File tmp= new File(PATH1) ;
if(tmp.exists())
tmp.delete();
File neu= new File(PATH2) ;
neu.renameTo(new File(PATH));
System.out.println("IPTC TAGs writing done ... !");
}
Auch dieser Code wird wird in Laufe des Projektes nochmal zu sehen sein. Weitere beschreibbare PTC Tags sind:
CONTENT_LOCATION_NAME
CITY
CATEGORY
KEYWORDS
COPYRIGHT_NOTIC
WRITER_EDITOR
IMAGE_TYPE
CONTACT
CREDIT
CAPTION_ABSTRACT