Mit den folgenden paar Zeilen Java Code lassen sich Fotos bequemen umbenennen, d.h. der Dateiname wird noch mit dem Zeitstempel aus den Exif Daten ergänzt. Möglich macht das das Framework metadata-extractor.
/* * Created on 28.06.2014 */ package de.denniswilmsmann.renamephotos; import java.io.File; import java.io.IOException; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import com.drew.imaging.ImageMetadataReader; import com.drew.imaging.ImageProcessingException; import com.drew.metadata.Metadata; import com.drew.metadata.exif.ExifSubIFDDirectory; /* * $Log: $ */ public class RenamePhotos { private final DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG); private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HHmmss"); public static void main(String[] args) { File folder = new File("D:\\PhotosToRename\\"); RenamePhotos ex = new RenamePhotos(); ex.parse(folder); } private void parse(File f) { if (f.isDirectory()) { parseDirectory(f); } else { parseFile(f); } } private void parseDirectory(File f) { for (File file : f.listFiles()) { if (file.isDirectory()) { parseDirectory(file); } else { parseFile(file); } } } private void parseFile(File f) { try { if (f.isFile() && isRenameRequired(f)) { Metadata metadata = ImageMetadataReader.readMetadata(f); ExifSubIFDDirectory directory = metadata.getDirectory(ExifSubIFDDirectory.class); Date date = directory.getDate(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL); String newName = sdf.format(date) + "_" + f.getName(); System.out.println(f.getName() + " -> " + newName); f.renameTo(new File(f.getParent() + "\\" + newName)); } else { System.out.println("skip " + f.getAbsolutePath()); } } catch (ImageProcessingException e) { System.out.println("error parsing " + f.getAbsolutePath()); } catch (IOException e) { System.out.println("error parsing " + f.getAbsolutePath()); } catch (NullPointerException e) { System.out.println("error parsing " + f.getAbsolutePath()); } } private boolean isRenameRequired(File f) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < f.getName().length(); i++) { sb.append(f.getName().charAt(i)); try { sdf.parse(sb.toString()); return false; } catch (ParseException e) { // ignore } } return true; } }
Und dazu noch die passsende pom.xml, damit die Dependencies einfach via maven geladen werden können:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>RenamePhotos</groupId> <artifactId>RenamePhotos</artifactId> <version>0.0.1-SNAPSHOT</version> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>com.drewnoakes</groupId> <artifactId>metadata-extractor</artifactId> <version>2.6.2</version> </dependency> </dependencies> </project>
Die Ausgabe auf der Konsole sieht dazu so aus:
CIMG2773.JPG -> 2012-02-23_172829_CIMG2773.JPG CIMG2774.JPG -> 2012-02-23_172842_CIMG2774.JPG CIMG2775.JPG -> 2012-02-23_172847_CIMG2775.JPG CIMG2776.JPG -> 2012-02-23_172853_CIMG2776.JPG CIMG2777.JPG -> 2012-02-23_184732_CIMG2777.JPG CIMG2778.JPG -> 2012-02-23_184746_CIMG2778.JPG CIMG2779.JPG -> 2012-02-23_184752_CIMG2779.JPG CIMG2780.JPG -> 2012-02-23_211635_CIMG2780.JPG CIMG2781.JPG -> 2012-02-23_211646_CIMG2781.JPG CIMG2782.JPG -> 2012-02-23_211655_CIMG2782.JPG CIMG2783.JPG -> 2012-02-23_211714_CIMG2783.JPG CIMG2784.JPG -> 2012-02-23_211724_CIMG2784.JPG CIMG2785.JPG -> 2012-02-23_211735_CIMG2785.JPG CIMG2786.JPG -> 2012-02-23_211745_CIMG2786.JPG CIMG2787.JPG -> 2012-02-23_211801_CIMG2787.JPG CIMG2788.JPG -> 2012-02-23_211810_CIMG2788.JPG CIMG2789.JPG -> 2012-02-23_211822_CIMG2789.JPG error parsing D:\PhotosToRename\desktop.ini
Der Code Style für den eclipse Java Formatter stammt von Google: https://google-styleguide.googlecode.com/svn/trunk/eclipse-java-google-style.xml
Ach ja, es gibt natürlich auch diverse kleine Tools, die das auch alles können, z.B. ExifRenamer für Mac OS oder dieses Tool für Windows.
Schreibe den ersten Kommentar