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