ReNamer:Scripts:Exiv2: Difference between revisions
 (Navigation)  | 
				 (Tested versions of ReNamer)  | 
				||
| Line 4: | Line 4: | ||
== Requirements ==  | == Requirements ==  | ||
* [http://www.exiv2.org/download.html exiv2.exe]   | * [http://www.exiv2.org/download.html exiv2.exe] in ReNamer's folder  | ||
== Code 1 ==  | == Code 1 ==  | ||
Author: Denis Kozlov. Date: 2013-04-01. Extract unformatted line out of the command line output of the <code>exiv2.exe</code> tool. This script extracts ''Image Timestamp''. Adjust <code>EXIV</code> and <code>TAG</code> constants to extract other tags.  | Author: Denis Kozlov. Date: 2013-04-01.  | ||
Extract unformatted line out of the command line output of the <code>exiv2.exe</code> tool. This script extracts ''Image Timestamp''. Adjust <code>EXIV</code> and <code>TAG</code> constants to extract other tags.  | |||
'''Hint:''' ''Image Timestamp'' value is usually formatted as "yyyy:mm:dd hh:mm:ss" which contains an illegal filename character ":". The illegal character can be easily replaced using an additional Replace rule.  | '''Hint:''' ''Image Timestamp'' value is usually formatted as "yyyy:mm:dd hh:mm:ss" which contains an illegal filename character ":". The illegal character can be easily replaced using an additional Replace rule.  | ||
* Tested with ReNamer v5.70.  | |||
<source>  | <source>  | ||
| Line 43: | Line 47: | ||
== Code 2 ==  | == Code 2 ==  | ||
Author: Denis Kozlov. Date: 2015-11-25. Extract EXIF date and reformat it according to user specification (<  | Author: Denis Kozlov. Date: 2015-11-25.  | ||
Extract EXIF date and reformat it according to user specification (<code>DATE_FORMAT</code> constant).  | |||
* Tested with ReNamer 6.3.  | |||
<source>  | <source>  | ||
Revision as of 13:39, 25 November 2015
Script integrates Exiv2 library in order to extract EXIF/IPTC/XMP tags from many types of images. CRW, CR2, RAW images are also supported.
Requirements
- exiv2.exe in ReNamer's folder
 
Code 1
Author: Denis Kozlov. Date: 2013-04-01.
Extract unformatted line out of the command line output of the exiv2.exe tool. This script extracts Image Timestamp. Adjust EXIV and TAG constants to extract other tags.
Hint: Image Timestamp value is usually formatted as "yyyy:mm:dd hh:mm:ss" which contains an illegal filename character ":". The illegal character can be easily replaced using an additional Replace rule.
- Tested with ReNamer v5.70.
 
{ Extract EXIF/IPTC/XMP tags using Exiv2 }
 
const
  EXE = 'exiv2.exe';
  TAG = 'Image timestamp\s*\:\s*(.*?)[\r\n]';
 
var
  Command, Output: String;
  Matches: TStringsArray;  
 
begin
  Command := EXE+' "'+FilePath+'"';
  if ExecConsoleApp(Command, Output) = 0 then
  begin
    Matches := SubMatchesRegEx(Output, TAG, False);
    if Length(Matches) > 0 then
      FileName := Matches[0] + WideExtractFileExt(FileName);
  end;
end.To extract IPTC Headline tag, you would need to make following changes:
EXE = 'exiv2.exe -pi';
TAG = 'Iptc.Application2.Headline\s*\w*\s*\d*\s*(.*?)[\r\n]';Code 2
Author: Denis Kozlov. Date: 2015-11-25.
Extract EXIF date and reformat it according to user specification (DATE_FORMAT constant).
- Tested with ReNamer 6.3.
 
const
  EXIV = 'exiv2.exe';
  DATE_TAG = 'Image timestamp\s*\:\s*(.*?)[\r\n]';
  DATE_PARTS = '(.+)\:(.+)\:(.+)\ (.+)\:(.+)\:(.+)';
  DATE_FORMAT = 'YYYY-MM-DD HH.NN.SS';
var
  Command, Output: String;
  Matches, DateParts: TStringsArray;
  Year, Month, Day, Hours, Minutes, Seconds: Integer;
  Date: TDateTime;
  DateOK: Boolean;
begin
  Command := EXIV + ' "' + FilePath + '"';
  if ExecConsoleApp(Command, Output) = 0 then
  begin
    Matches := SubMatchesRegEx(Output, DATE_TAG, False);
    if Length(Matches) > 0 then
    begin
      DateParts := SubMatchesRegEx(Matches[0], DATE_PARTS, False);
      if Length(DateParts) > 0 then
      begin
        DateOK :=
          TryStrToInt(DateParts[0], Year) and TryStrToInt(DateParts[1], Month) and
          TryStrToInt(DateParts[2], Day) and TryStrToInt(DateParts[3], Hours) and
          TryStrToInt(DateParts[4], Minutes) and TryStrToInt(DateParts[5], Seconds);
        if DateOK then
        begin
          Date := EncodeDateTime(Year, Month, Day, Hours, Minutes, Seconds, 0);
          FileName := FormatDateTime(DATE_FORMAT, Date) + WideExtractFileExt(FileName);
        end;
      end;
    end;
  end;
end.