jpg Header lesen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
diejohi
Beiträge: 9
Registriert: Mo 29. Dez 2014, 15:13

jpg Header lesen

Beitrag von diejohi »

Ich möchte aus *.jpg Dateien den Header lesen und aus Datum und Aufnahmezeit einen Zusatz für den Dateinamen generieren. Mit der procedure

Code: Alles auswählen

procedure TTestForm.RenameStartButtonClick(Sender: TObject);
var
  Search     : TSearchRec;
  DateTime   : TDateTime;
  Zeit       : string;
  Datum      : string;
  oldFileNAme: string;
  newFileName: string;
  FilePath   : string;
  Ext        : string;
  i          : integer;
  Index      : integer;
begin
   Index := 0;
   RootListBox.OnSelectionChange := nil;
   for i := 0 to RootListBox.Count-1 do
  begin
    RootListBox.ItemIndex := Index;
    oldFileName := RootListBox.GetSelectedText;
    if FindFirst(oldFileName, faAnyFile, Search) = 0 then
      try
         DateTime := FileDateToDateTime(Search.Time);
         Zeit := TimeToStr(DateTime);
         Delete(Zeit, Pos(':', Zeit), 1);
         Delete(Zeit, Pos(':', Zeit), 1);
         Datum := DateToStr(DateTime);
         Delete(Datum, Pos('.', Datum), 1);
         Delete(Datum, Pos('.', Datum), 1);
         Ext := ExtractFileExt(oldFileName);
         RootFileNameEdit.Text := '_' + Datum + '_' + Zeit + Ext;
         FilePath := ExtractFilePath(oldFileName);
         newFileName := FilePath + RootDirectoryEdit.Text + RootFileNameEdit.Text;
         if RenameFile(oldFileName, newFileName) then
           RootListBox.Items.Delete(Index)
         else
           Index := Index + 1;
      finally
        SysUtils.FindClose(Search);
      end;
   end;
end;
bekomme ich aber das Datum der letzten Änderung und nicht das Aufnahmedatum der Datei. Im Netz habe ich das nachstehende Beispiel gefunden das von einer Delphi Seite stammt. Mein Problem ich weiß nicht wo dEXIF in Lazarus definiert ist. Gibt es eventuell unter Lazarus eine andere Möglichkeit das Aufnahmedatum zu lesen?

Vielen Dank
Dieter

Code: Alles auswählen

uses
  dEXIF;
 
procedure TTestForm.OeffnenItemClick(Sender: TObject);
var
   ImgData: TImgData;
begin
    ImgData := TimgData.Create;
   try
      ImgData.ProcessFile('Ladepfad\bild.jpg');
 
      // hier das Bild bearbeiten und, falls nicht bereits geschehen, in einem TJPEGImage ablegen
 
      ImgData.WriteEXIFJpeg(JpegImage, 'Zielpfad\bild.jpg');
   finally
      FreeAndNil(ImgData);
   end;
end;
Zuletzt geändert von Lori am Mi 14. Jan 2015, 20:12, insgesamt 1-mal geändert.
Grund: Highlighter

wp_xyz
Beiträge: 5135
Registriert: Fr 8. Apr 2011, 09:01

Re: jpg Header lesen

Beitrag von wp_xyz »

Ich hab' dExif früher mal auf Lazarus angepasst - ich hoffe, es läuft noch
Dateianhänge
dEXIF.zip
(69.45 KiB) 91-mal heruntergeladen

diejohi
Beiträge: 9
Registriert: Mo 29. Dez 2014, 15:13

Re: jpg Header lesen

Beitrag von diejohi »

Oh danke! das werde ich bald wissen

diejohi
Beiträge: 9
Registriert: Mo 29. Dez 2014, 15:13

Re: jpg Header lesen

Beitrag von diejohi »

Hallo, tut mir leid, dass ich mich noch nicht gemeldet habe. Leider sind mir Arbeiten unverhofft dazwischen gekommen die keinen Aufschub dulden.

wbeppler
Beiträge: 131
Registriert: So 20. Jul 2014, 10:27
OS, Lazarus, FPC: kubuntu, raspbian, laz 1.2 / 0.9 microcontroller
CPU-Target: 8-64 bit
Wohnort: bodensee
Kontaktdaten:

Re: jpg Header lesen

Beitrag von wbeppler »

hallo,

der weitere verlauf wuerd mich auch sehr interessieren, so was stelle ich mir sehr praktisch vor bei den heutigen tausenden bildern .....

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: jpg Header lesen

Beitrag von theo »

Das funktioniert (lesen getestet).
Die Demos lassen sich direkt nur auf Windows kompilieren, aber das Package funktioniert auch auf Linux.

Antworten