The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Quiq::TimeLapse::Directory - Bildsequenz-Verzeichnis

BASE CLASS

Quiq::Hash

SYNOPSIS

  # Klasse laden
  use Quiq::TimeLapse::Directory;
  
  # Instantiiere Verzeichnis-Objekt
  $tdr = Quiq::TimeLapse::Directory->new('/my/image/dir');
  
  # Anzahl der enthaltenen Bilder
  $n = $tdr->count;
  
  # Niedrigste Bildnummer
  $n = $tdr->minNumber;
  
  # Höchste Bildnummer
  $n = $tdr->maxNumber;
  
  # alle Bilder (des Verzeichnisses oder aus range.def, wenn definiert)
  @images = $tdr->images;
  
  # Bilder eines Nummernbereichs
  
  @images = $tdr->images('113-234');
  @images = $tdr->images('290-');
  @images = $tdr->images('422');
  
  # Bilder zu einem Bezeichner aus range.def
  @images = $tdr->images('autofahrt');
  
  # Alle Bilder des Verzeichnisses
  @images = $tdr->images('all');
  
  # Alle Bilder aus range.def (leer, wenn range.def nicht existiert)
  @images = $tdr->images('used');
  
  # Alle Bilder des Verzeichnisses, die nicht range.def vorkommen
  # (leer, wenn range.def nicht existiert)
  @images = $tdr->images('unused');
  
  # Lookup eines Bildes
  $img = $tdr->image(422); # liefert undef, wenn nicht existent
  
  # Liefere das Objekt mit den Range- und Clip-Definitionen. Über
  # dieses Objekt können die Bildfolgen von Ranges und Clips gezielt
  # abgerufen werden. Details siehe Quiq::TimeLapse::RangeDef
  $trd = $tdr->rangeDef;

DESCRIPTION

Ein Objekt der Klasse repräsentiert ein Verzeichnis, das eine geordnete Liste von Bildern enthält, ggf. verteilt über mehrere Unterverzeichnisse. Die Bilder können einzeln über ihre Bildnummer oder als Bildfolge über die Angabe eines Nummern-Bereichs oder eines Range- oder Clip-Bezeichners (definiert in der Datei range.def) abgefragt werden.

Mit der Liste von Bildern kann eine Bildfolge (Quiq::TimeLapse::Sequence) instantiiert werden, aus welcher u.a. ein Video generiert werden kann. Siehe die Doku dieser Klasse.

ATTRIBUTES

dir

Pfad des Verzeichnisses.

imageA

Array der Bilddatei-Objekte des Verzeichnisses, nach Bildnummer sortiert.

imageH

Hash der Bilddatei-Objekte, mit Bildnummer als Schlüssel.

rangeDef

Referenz auf das Rangedatei-Objekt. Die Referenz wird beim ersten Zugriff zugewiesen. Existiert die Datei range.def nicht, wird eine Exception geworfen.

METHODS

Konstruktor

new() - Instantiiere Bildverzeichnis-Objekt

Synopsis

  $tdr = $class->new($dir);

Arguments

$dir

Wurzelverzeichnis.

Returns

Referenz auf Bildverzeichnis-Objekt

Description

Instantiiere ein Bildverzeichnis-Objekt aus den Bildern in der Verzeichnisstruktur $dir und liefere eine Referenz auf dieses Objekt zurück. Die Verzeichnisstuktur wird per find() nach Bilddateien durchsucht und kann daher beliebig tief verschachtelt sein.

Akzessoren

dir() - Pfad des Zeitraffer-Verzeichnisses

Synopsis

  $path = $tdr->dir;
  $path = $tdr->dir($subPath);

Description

Liefere den Pfad des Zeitraffer-Verzeichnisses. Ist Zeichenkette $subPath angegeben, wird diese mit '/' getrennt an den Pfad angefügt.

Objektmethoden

count() - Anzahl aller Bilder

Synopsis

  $n = $tdr->count;

Returns

Integer >= 0

Description

Liefere die Anzahl der im Zeitraffer-Verzeichnis enthaltenen Bilder.

minNumber() - Niedrigste Bildnummer

Synopsis

  $n = $tdr->minNumber;

Returns

Integer >= 0

Description

Liefere die niedrigste Bildnummer. Die niedrigste Bildnummer ist die Nummer des ersten Bildes. Ist die Liste leer, liefere 0.

maxNumber() - Höchste Bildnummer

Synopsis

  $n = $tdr->maxNumber;

Returns

Integer >= 0

Description

Liefere die höchste Bildnummer. Die höchste Bildnummer ist die Nummer des letzten Bildes. Ist die Liste leer, liefere 0.

Bildnummern

numbers() - Bildnummern-Ausdruck zu Bildnummern-Liste

Synopsis

  @numbers|$numberA = $tdr->numbers($expr);

Returns

Liste von Bildnummern (Integer). Im Skalarkontext eine Referenz auf die Liste.

Description

Liefere die Liste der Bildnummern zu Bildnummern-Ausdruck $expr.

resolveFunctionExpression() - Wende Funktion an

Synopsis

  $str = $tdr->resolveFunctionExpression($name,$args);

Returns

Zeichenkette

Description

Wende Funktion $func auf seine Argumente $args an und liefere die resultierende Zeichenkette (Bildnummern-Aufzählung) zurück.

resolveIdentifier() - Wert eines Clip- oder Range-Bezeichners

Synopsis

  $str = $tdr->resolveIdentifier($key);

Returns

Zeichenkette

Description

Liefere den Wert des Bezeichners $key.

resolveRange() - Löse Bildnummern-Bereichsangabe auf

Synopsis

  $str = $tdr->resolveRange($n,$m);

Returns

Aufzählung von Bildnummern als Zeichenkette

Description

Überführe eine Bildnummern-Bereichsangabe ("N-M") in eine Nummern-Aufzählung ("N ... M").

Bilddateien

images() - Folge von Bilddatei-Objekten

Synopsis

  @images|$imageA = $tdr->images;
  @images|$imageA = $tdr->images($expr);

Arguments

$expr

Bildfolgen-Ausdruck.

Returns

Liste von Bilddatei-Objekten. Im Skalarkontext liefere eine Referenz auf die Liste.

Description

Liefere eine Folge von Bilddatei-Objekten gemäß Bildfolgen-Ausdruck $expr. Ist kein Bildfolgen-Ausdruck angegeben, liefere alle Bilddatei-Objekte. Ist eine Range-Datei definiert, bedeutet "alle", alle genutzten Bilder (= 'used'), ansonsten ausnahmslos alle Bilder des Zeitraffer-Verzeichnisses (= 'all').

Die Methode cached ihre Ergebnisse, so dass jede Bildfolge nur einmal bestimmt wird.

image() - Lookup Bilddatei-Objekt nach Bild-Nummer

Synopsis

  $img = $tdr->image($n);

Arguments

$n

Bild-Nummer

Returns

Bild-Objekt oder undef.

Description

Liefere das Bild-Objekt mit Bild-Nummer $n. Existiert keine Bild-Objekt mit Nummer $n, liefere undef.

Operationen

importImages() - Importiere Bilddateien in Zeitraffer-Verzeichnis

Synopsis

  $class->importImages($dir,$srcDir);

Arguments

$dir

Zeitraffer-Verzeichnis, in das importiert wird.

$srcDir

Quell-Verzeichnisstruktur mit den Bildern, die importiert werden.

Options

-reorganize => $bool (Default: 0)

Rufe Methode reorganize()

-sort => 'name'|'mtime' (Default: 'name')

Sortierung der Bilddateien vor dem Import. Entweder nach Name ('name') oder nach letzter Änderung und sekundär Name ('mtime'). Letzeres ist beim Import von GoPro-Bildern wichtig.

-subDir => $subPath (Default: undef)

Importiere die Bilder in das Zeitraffer-Subverzeichnis $subPath. Existiert das Verzeichnis nicht, wird es angelegt.

-verbose => $bool (Default: 1)

Gibt Laufzeitinformation auf STDOUT aus.

Returns

nichts

Description

Füge die Bilddateien aus Verzeichnisstruktur $srcDir zum Zeitraffer-Verzeichnis $dir hinzu.

reorganize() - Reorganisiere Bilddateien

Synopsis

  $class->reorganize($dir,@opt);

Arguments

$dir

Pfad zum Zeitraffer-Verzeichnis.

Options

-dryRun => $bool (Default: 0)

Zeige Änderungen, führe sie aber nicht aus.

Returns

nichts

Description

Reorganisiere die Bilddateien des Zeitraffer-Verzeichnisses, indem sie nach ihrer Bildnummer auf Unterverzeichnisse mit je 500 Bilddateien verteilt werden.

Es wird die Unterverzeichnisstruktur angelegt

  000001  (für Bilder mit Bildnummer 1 bis Bildnummer 500)
  000501  (Bildnummer 501 bis 1000)
  001001  (Bildnummer 1001 bis 1500)
  usw.

und die Bilder in ihr Verzeichnis bewegt. Befindet sich eine Bilddatei bereits im richtigen Verzeichnis, wird sie nicht bewegt.

Anschließend werden leere Verzeichnisse gelöscht.

Die Operation kann wiederholt angewendet werden, an einem bereits reorganisierten Verzeichnis wird keine Änderung vorgenommen.

VERSION

1.164

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2019 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.