Moduł Image::ExifTool

Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowa

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.

Uniwersytet Gdański - Instytut Informatyki - Strona domowa - Perl - Wyklady
[c] Piotr Arłukowicz, materiały z tej strony udostępnione są na licencji GNU.