1 2 3 4 5 6 7 8 9 10 11 12
use Image::ExifTool; my $date = '2001:02:01 13:55:22'; #%Y:%m:%d %H:%M:%S my $file = 'test.jpeg'; my $neufile = "$file.new"; my $exifTool = Image::ExifTool->new; $exifTool->SetNewValue(DateTimeOriginal => $date, Protected=>1); $exifTool->SetNewValue(CreateDate=>$date, Protected=>1); my $success = $exifTool->WriteInfo($file, $neufile);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
use strict; use warnings; use 5.010; my $DEBUG; use Time::Piece; use Time::Seconds; my $zeit_differenz = +2; # 2 Sekunden my $start_datum; my $first = 1; my $t; for my $fn (<00*.jpg>) { # hole alle Dateien per glob if ($first) { $start_datum = get_exif_date($fn); # hole Datum der ersten Datei! $DEBUG && say "EXIF date: $start_datum"; $t = Time::Piece->strptime($start_datum, '%Y:%m:%d %H:%M:%S'); # Datum in internes Time::Piece $DEBUG && say "Time::Piece date: ".$t->ymd(":")." ".$t->hms; $first = 0; next; } $t += $zeit_differenz; # nächsten Zeitpunkt setzen my $date = $t->ymd(":")." ".$t->hms; # Datumszeichenkette bauen $DEBUG && say "Next date: $date"; change_exif_date($fn, $date); # neues EXIF-Datum in Datei setzen } use Image::ExifTool; sub change_exif_date { my $file_name = shift; my $date = shift; my $exifTool = Image::ExifTool->new; my $info = $exifTool->SetNewValuesFromFile($file_name); # Original EXIF-Daten holen $exifTool->SetNewValue(DateTimeOriginal => $date); # Originaldatum (EXIF-Tag DateTimeOriginal) setzen $exifTool->SetNewValue(CreateDate => $date); # Erzeugungsdatum (EXIF-Tag CreateDate) setzen my $success = $exifTool->WriteInfo($file_name); # EXIF-Daten zurückschreiben return $success; } sub get_exif_date { my $file_name = shift; my $exifTool = Image::ExifTool->new; my $info = $exifTool->ImageInfo($file_name); # Exif-Daten aus Datei auslesen my $date = $exifTool->GetValue("CreateDate"); # EXIF-Tag CreateDate auslesen return $date; }
2015-05-25T09:40:28 jan99Jetzt möchte ich gerne die jeweiligen Aufnahmezeitpunkt in die EXIF-Daten schreiben.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
use strict; use warnings; use feature 'say'; use Image::ExifTool qw(:Public); my $exifTool = new Image::ExifTool; my $tag = 'CreateDate'; say "Description of tag $tag: ", $exifTool->GetDescription($tag); # return meta information for 1 tag only (procedural) my $file = 'CIMG0052.JPG'; my $info = ImageInfo($file, $tag); say "tag->info: $tag => $$info{$tag}"; # 2013:08:19 11:04:35
Quote# Vorsicht: 'ThumbnailImage' => ref to Image !!!
# Tag IDs / names:
# 0x0112 Orientation
# 0x011a XResolution
# 0x011b YResolution
# 0x0132 ModifyDate
# 0x9003 DateTimeOriginal
# 0x9004 CreateDate
# 0xa002 ExifImageWidth
# 0xa003 ExifImageHeight
# 0xbc04 ImageType
# 0xbc80 ImageWidth
# 0xbc81 ImageHeight
# 0xbc82 WidthResolution
# 0xbc83 HeightResolution
2015-05-25T16:30:37 GwenDragonJa, eigentlich sollten diese Daten drin stehen.
Aber manches Betriebssystem wie Windows 7 zeigt dummerweise nur die Zeit in HH::MM im Dateiexplorer, ...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
#!/usr/bin/perl # Quelle: http://www.perl-community.de/bat/poard/thread/19667 # install Image::ExifTool use strict; use warnings; use 5.010; my $DEBUG; #use Time::Piece; use Time::Seconds; my $t = Time::Piece->strptime('2015:05:26 13:55:22', '%Y:%m:%d %H:%M:%S'); my $zeit_differenz = +2; # 2 Sekunden my $start_datum; my $first = 1; for my $fn (<*.jpg>) { # hole alle Dateien per glob my $date = $t->ymd(":")." ".$t->hms; # Datumszeichenkette bauen $DEBUG && say "Next date: $date"; change_exif_date($fn, $date); # neues EXIF-Datum in Datei setzen $t += $zeit_differenz; # nächsten Zeitpunkt setzen } use Image::ExifTool; sub change_exif_date { my $file_name = shift; my $date = shift; my $exifTool = Image::ExifTool->new; my $info = $exifTool->SetNewValuesFromFile($file_name); # Original EXIF-Daten holen $exifTool->SetNewValue(DateTimeOriginal => $date); # Originaldatum (EXIF-Tag DateTimeOriginal) setzen $exifTool->SetNewValue(CreateDate => $date); # Erzeugungsdatum (EXIF-Tag CreateDate) setzen my $success = $exifTool->WriteInfo($file_name); # EXIF-Daten zurückschreiben return $success; }
QuoteCan't locate object method "strptime" via package "Time::Piece" (perhaps you for
got to load "Time::Piece"?) at geo2image.pl line 14.
my $DEBUG = 1;
2015-05-26T10:18:42 jan99Wie ist das mit dem Skript und Rechten - darf ich den Source dann in OpenStreetMap oder anderswo für diesen Zweck weiter veröffentlichen / verwenden.... ?