Einzelnen Beitrag anzeigen

Ralf Stehle

Registriert seit: 8. Aug 2003
124 Beiträge
 
Delphi 7 Professional
 
#1

JPG (oder JPEG) und Kommentar oder Exif-Daten

  Alt 5. Sep 2007, 08:03
ich möchte in Jpg-Bilddateien kurze Beschreibungen über das Bild speichern.
Dafür bietet sich das Exif-Format an

Informationen über das Exif-Format in JPG´s gibt es im Internet z.B. bei
EXIF-Daten in JPEG-Dateien.pdf oder http://www.exif.org/

Entsprechend dem Tutorial EXIF-Daten in JPEG-Dateien.pdf habe ich versuchsweise mit folgenden Code
direkt nach dem Header FF D8 die Exif-Sequenz
FF-D8-FF-E1-HL-LL-45-78-69-66-00-00-49-49-2A-00-08-00-00-00
eingefügt, wobei für die Satzlänge HL LL = 00 19 = Gesamtlänge von 25 Zeichen eingegeben wird.

Leider führt das Beispiel zu einem nicht mehr lesbaren Format. Wahrscheinlich darf die FF D8-Sequenz auch nicht direkt nach den ersten 2 Bytes eingefügt werden oder der Aufbau stimmt nicht (?!)

Delphi-Quellcode:
{******************************************************************************}
{*                             Exif-Daten ändern                              *}
{******************************************************************************}
procedure TForm1.WriteExifStream(SelectedRoot, SelectedFile: string);
var
  fs: TFileStream;
  ba, bb: array of byte;
  i: integer;
begin
  if AnsiLastChar(SelectedRoot)^ <> '\then SelectedRoot := SelectedRoot + '\';

  fs := TFilestream.Create(SelectedRoot + SelectedFile ,fmopenread or fmShareDenyNone);
  SetLength(ba, fs.Size);
  fs.Read(ba[0], Length(ba));
  SetLength(ba, fs.Size);
  SetLength(bb, fs.Size + 25);
  fs.Free;
  //zu Testzwecken einfach mal Byte für Byte den Header FF D8 und danachdie kurze Exif-Sequenz
  bb[0] :=255; //FF
  bb[1] :=216; //D8
  bb[2] :=255; //FF
  bb[3] :=225; //E1
  bb[4] :=00; //HL
  bb[5] :=19; //LL
  bb[6] :=69; //45;
  bb[7] :=120; //78;
  bb[8] :=105; //69;
  bb[9] :=102; //66;
  bb[10]:=00;
  bb[11]:=00;
  bb[12]:=73; //49;
  bb[13]:=73; //49;
  bb[14]:=0;
  bb[15]:=8;
  bb[16]:=0;
  bb[17]:=0;
  bb[18]:=0;

  bb[19]:=0;
  bb[20]:=0;
  bb[21]:=0;
  bb[22]:=0;
  bb[23]:=0;
  bb[24]:=0;
  bb[25]:=0;

  //der Rest der Originaldatei wird nach Byte 25 angehängt
  for i := 2 to High(ba) do
  begin
    bb[i+25]:= ba[i];
  end;

  //Buffer bb in neues File
  fs := TFileStream.Create(SelectedRoot + 'Neu.jpg', fmCreate);
  try
    fs.Writebuffer(bb[0], Length(bb));
  finally
    fs.Free;
  end;
end;
Hat jemand einen Tipp für mich wie ich weiterkomme? Es soll auch die Möglichkeit geben, einen einfachen Kommentar in eine JPG einzubinden, ohne gleich die ganze Exif-Geschichte programmieren zu müssen. Das würde mir auch schon genügen

Ralf
Ralf Stehle
ralfstehle@yahoo.de
  Mit Zitat antworten Zitat