Moduł Image::ExifTool
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaSpis treści
Obsługa modułu (Image::ExifTool)
O czym to jest
Exif - co to?
Exchangeable image file format (sktrót: Exif) to standard metadanych dla plików graficznych i dźwiękowych używanych przez aparaty fotograficzne. Metadane zawierają mnóstwo przeróżnych informacji. Oprócz podstawowych takich jak np. data i czas utworzenia pliku (czyli innymi słowy wykonania zdjęcia) znajdziemy w nich także szczegółowe dane dotyczące np. czasu i trybu naświetlania, czułości ISO, szerokości otwarcia przesłony i wielu innych parametrów związanych z daną fotografią. Zakres przechowywanych danych może nawet obejmować informacje o miejscu (w sensie geolokacyjnym), w którym zostało wykonane zdjęcie.
Dane Exif osadzone są wewnątrz plików. Niestety producenci zarówno sprzętu, jak i oprogramowania - mimo, iż w większości przypadków implementują obsługę Exif - to jednak czynią to w bardzo różnym stopniu. W przypadku oprogramowania prowadzi to czasem do częściowej lub nawet całkowitej utraty metadanych - obawa taka jest najbardziej realna w przypadku korzystania z przestarzałego software'u - choć nie tylko, bo nawet Windows XP borykał się z tym problemem [czytaj więcej... ].
Aktualne systemy operacyjne, a tym bardziej programy służące do przeglądania i archiwizowania fotografii, pozwalają na zapoznanie się z podstawowymi informacjami zawartymi w metadanych (np. w WindowsXP wystarczy podejrzeć właściwości pliku). Jednak prawie zawsze trzeba liczyć się z faktem, iż informacje prezentowane są w sposób wybiórczy, a dostępne interfejsy nie pozwalają na dodawanie nowych szczegółów.
Moduł ExifTool
ExifTool to obszerny zbiór modułów do odczytywania i zapisywania informacji zawartych w metadanych. Oprócz samego formatu Exif obsługuje on również inne standardy metadanych (takie jak np. popularny ID3). W sumie ExifTool wspiera 71 rodzajów plików oraz ponad 20 formatów matadanych. Z jego pomocą poznamy i zapiszemy metadane plików graficznych, dźwiękowych oraz video.
Twórcą modułu jest Phil Harvey, który rozwija swoje dzieło od 2003 r. Miesiąc temu pojawiła się nowa wersja pakietu.
Projekt zaskakuje bogactwem opcji i rozwiniętą dokumentacją. Co ciekawe dostępne są również działające samodzielnie, skompilowane wersje dla systemów Windows i Mac OS X [czytaj więcej... ].
Metody
Konstruktor
Utworzenie nowego obiektu ExifTool:
$exifTool = new Image::ExifTool;
Wybrane metody
- ImageInfo
- Gromadzenie informacji znajdujących się w metadanych odbywa się za pomocą funcji ImageInfo. W celu realizacji własnej funkcjonalności wywołuje ona metody: ExtractInfo do pobrania informacji; GetInfo, by wygenerować hasz z danymi; oraz GetTagList, by zwrócić listę pobranych tagów. Metoda zwraca referencję do hasza zawierającego informacje pobrane z metadanych.
my $info = $exifTool->ImageInfo('IMG_0316.jpg'); foreach (sort keys %$info){ printf("%-24s : %s\n", $_,$$info{$_}); }
- Options
- Jak sama nazwa wskazuje metoda służy do zarządzania ustawieniami modułu: jaki format daty ma być używany, jaki standard kodowania znaków i wiele innych. Metoda zwraca oryginalną wartość ostatnio specyfikowanego parametru.
#dane będą drukowane do pliku filename.out open(MYFILE, ">filename.out"); $oldSetting = $exifTool->Options(TextOut => \*MYFILE);
- ClearOptions
- Przywrócenie domyślnych ustawień.
- WriteInfo
- Zapisywanie metadanych do pliku.
$exifTool->WriteInfo('canon_changed.jpg');
- GetValue
- Pobranie wartości dla danego tagu.
my $info = $exifTool->ImageInfo('IMG_0316.jpg'); printf ("ISO: %s",$exifTool->GetValue('ISO'));
- SetNewValue
- Ustawia nową wartość dla podanego tagu, o ile oczywiście istnieje możliwość modyfikacji wartości dla rozważanego tagu.
#ustawienie wartości ISO na 800 $exifTool->SetNewValue('ISO',800); #zamazanie informacji o ewentualnym oprogramowaniu, w ktorym plik został zmodyfikowany $exifTool->SetNewValue('Software',undef); $exifTool->WriteInfo('IMG_03161.jpg');
- SetNewValuesFromFile
- Ustawia wartości modyfikowalnych tagów bazując na meta informacjach zawartych w innym pliku.
$exifTool->SetNewValuesFromFile('canon1.jpg'); $exifTool->WriteInfo('canon_changed.jpg');
- SetFileModifyDate
- Ustawia wartość dotyczącą daty i czasu modyfikacji danego pliku.
$exifTool->SetNewValue('FileModifyDate',"2000:12:24 12:54:55");
Przykład
use Image::ExifTool;
my @ioTagList = ('Aperture','ShutterSpeed','ISO','ResolutionUnit','WhiteBalance','ExposureCompensation','Make');
open(MYOUTFILE, ">info.html");
my $exifTool = new Image::ExifTool();
$oldSetting = $exifTool->Options(TextOut => \*MYOUTFILE);
$oldSetting = $exifTool->Options(HtmlDump => 1);
$oldSetting = $exifTool->Options(Duplicates => 0);
my $info = $exifTool->ImageInfo('IMG_03161.jpg',@ioTagList);
foreach (sort keys %$info) { printf("%-24s : %s\n", $_,$$info{$_}); }
Wynik działania skryptu dla powyższego pliku:
Aperture : 9.0 ExposureCompensation : 0 ISO : 200 Make : Canon ResolutionUnit : inches ShutterSpeed : 1/125 WhiteBalance : Manual
Fragment wygenerowanego przez skrypt dokumentu html zawierającego dodatkowo dane w formacie szesnastkowym:
Dodatkowe informacje
Ze względu na bogactwo ExifTool powyższy opis należy traktować raczej jako wstęp do przygody z tym wszechstronnym i praktycznym modułem.
Przeczytaj dokumentację Image::ExifTool - Read and write meta information - search.cpan.org
Informacje o autorze opracowania
Autor: M.M.