Показать сообщение отдельно
  (#2) Старый
andyb andyb вне форума
заслуженный участник
Научный сотр.
 
Сообщений: 468
Регистрация: 27.10.2005
По умолчанию Теперь о том как этим востользоваться - 19.03.2007, 00:21

Нужно установить perl интерпретатор (я использую версию ActivePerl 5.8.6.811
http://www.activestate.com/ActivePerl/), библиотеку Image-ExifTool-6.80
(http://www.sno.phy.queensu.ca/~phil/exiftool/) и использовать скрипт exif_stat.pl.

Исходный код скрипта:
----------------------- начало ---------------------------
#!/bin/perl -w
# use: exif_stat.pl [<folder>] [<file extention>]
use strict;
use File::Find;
use Image::ExifTool qw(:Public);

my $dir = shift;
$dir = '.' unless defined ($dir);
my $ext = shift;
$ext = 'cr2' unless defined ($ext);
$ext = '\.' . $ext . '$';

my %focal_set;
my $max_val = 0;
my $max_bar = 70;

if (open (IN, "exif_rep.txt"))
{
while (<IN>)
{
/^([0-9.mm]*)\s*(\d*)/;
next unless defined($1) and defined($2);
$focal_set{$1} = $2;
$max_val = $2 if $max_val < $2;
}
close (IN);
}

find ({wanted => \&process, no_chdir => 1}, $dir);

open (OUT, ">exif_rep.txt");
foreach (sort (keys %focal_set))
{
my $focal = $_;
my $value = $focal_set{$_};
my $bar = '*' x ($max_val > $max_bar ? ($value * ($max_bar - 1) / $max_val + 1) : $value);
write (OUT);

format OUT =
@>>>>> @##### @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<
$focal, $value, $bar
.

}
close (OUT);

sub process
{
return if -d $File::Find::name;
return unless $File::Find::name =~ /$ext/i;

print "$File::Find::name\n";

my $info = ImageInfo($File::Find::name);
my $focal = $$info{'FocalLength'};

if (defined ($focal))
{
$focal_set{$focal}++;
$max_val = $focal_set{$focal} if $max_val < $focal_set{$focal};
}
else
{
print "warn: focal length is undefined in $File::Find::name\n";
}
}
----------------------- конец ----------------------------

Скопируйте и вставте исходный код в файл exif_stat.pl.
Запустите скрипт, в качестве параметра укажите путь откуда рекурсивно делать поиск файлов с заголовками exif. По умолчанию анализируются файлы CR2. (Лично у меня есть в архиве jpeg-и друзей, а также переделаные позже снимки, т.е. дубли, поэтому анализ jpeg-ов я решил не делать.) Если необходимо анализировать др. файлы - укажите вторым параметром расширение.

Примеры коммандных строк запуска скрипта:
exif_stat.pl - ищет начиная с текущей папки файлы CR2
exif_stat.pl e:\ - ищет начиная с корня E файлы CR2
exif_stat.pl . jpg - ищет начиная с текущей папки файлы jpg

Во время работы на экран выводятся обрабатываемые файлы.
Результат записывается в файл exif_rep.txt.
В следующий запуск (для др. архива) скрипт подхватит статистику из
exif_rep.txt, дополнит ее новыми данными и перезапишет отчет.

Upd: Статья также доступна здесь: http://byandy.livejournal.com/6515.html. (Получилось избежать ненужного в данном случае форматирования и искажения кода и таблицы.)

Вроде бы все.
Ответить с цитированием