Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi JPG (oder JPEG) und Kommentar oder Exif-Daten (https://www.delphipraxis.net/98996-jpg-oder-jpeg-und-kommentar-oder-exif-daten.html)

Ralf Stehle 5. Sep 2007 08:03


JPG (oder JPEG) und Kommentar oder Exif-Daten
 
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 5. Sep 2007 08:19

Re: JPG (oder JPEG) und Kommentar oder Exif-Daten
 
Entschuldigung, ich habe die Frage in einer völlig falschen Rubrik gestellt. Daher habe ich Sie nochmals neu im korreten Themenbereich gestellt. Kann ich diese Frage an der falschen Stelle wieder löschen?

Phoenix 5. Sep 2007 08:33

Re: JPG (oder JPEG) und Kommentar oder Exif-Daten
 
Da kümmern wir uns schon drum :)

DP-Maintenance 5. Sep 2007 08:33

DP-Maintenance
 
Dieses Thema wurde von "Phoenix" von "Internet / LAN / ASP.NET" nach "Multimedia" verschoben.
*schieeeeeeeeeb*

soulies 5. Sep 2007 10:54

Re: JPG (oder JPEG) und Kommentar oder Exif-Daten
 
hi ralf,

ich glaube du bist auf einem falschem weg ...

richtig ist das jpg exif daten beinhalten können - die kannst/solltest
nicht verändern [das sind meistens daten über die kamera mit der ein bild
erstellt wurde]

um informationen in jpg einzufügen wurde iptc [international press telecommunication council] entwickelt --> das sollte auch dein stichwort sein

zu dem hast du einen bestimmten aufbau zu befolgen, wie du es ja schon aus deiner fkt sehen kannst
- denn jeder bereich beginnt mit einem marker , dann länge, dann daten oder offset usw.

FF D8 Bild beginn
FF D9 Bild ende
FF E1 EXIF Daten
FF ED IPTC Daten
FF ... usw

ich hoffe ich habe dich auf den richtigen weg gebracht, ansonsten einfach fragen zu dem thema stellen
und ich bemühe mich sie zu beantworten ...

Ralf Stehle 5. Sep 2007 12:32

Re: JPG (oder JPEG) und Kommentar oder Exif-Daten
 
leider finde ich keine einfach verständliche IPTC-Spezifikation. Hier im Forum scheint sich noch niemand damit auseinandergesetzt zu haben, beim Googeln habe ich bei Wikipedia http://de.wikipedia.org/wiki/IPTC-NAA-Standard und die Seite http://www.m-software.de/iptc-felder.html gefunden

In meinen Bilddateien finde ich gleich zweimal die Zeichenfolge FF D8 und eine Zeichenfolge FF E1
aber nach FF E1 kommt gleich FF E2 02 F9 02 46 03 47, wo ist denn da genau die Länge des Exif gespeichert, da ich ja wohl direkt im Anschluß meine IPTC-Zeichenfolge eingeben muss

Auf der Seite http://www.m-software.de/iptc-felder.html finde ich eine Liste mit den IPTC-Feldern, kannst Du mir an einem Feld zeigen, wie ich das umsetzen muss? (FF ED 2 Bytes für die Länge #120 Bytes für Beschreibung....?)

IPTC-Feldname IPTC-Id IPTC-Feldbeschreibung
Object Name #005 Name des Objektes
Edit Status #007 Der Bearbeitungsstatus
Priority (Urgency) #010 Die Priorität
Category #015 Die Kategorie
Supplemental Category #020 Zusätzliche Kategorien wenn vorhanden
Keywords #025 Keywörter für die Suche
........
Caption #120 Beschreibung

Unter Caption könnte ich ja passend meine Bildbeschreibung unterbekommen!

Ein kleiner Tipp wäre wunderbar
Danke

Ralf

soulies 5. Sep 2007 13:03

Re: JPG (oder JPEG) und Kommentar oder Exif-Daten
 
hi ralf,

wenn du wirklich interessiert bist dann kann ich später hier einige erläuterungen geben.

wenn es dir zu umständlich sein sollte bringt dich vllt. folgendes weiter von luckie
http://www.michael-puff.de/Developer...Comment1_0.zip


cya

soulies 5. Sep 2007 13:59

Re: JPG (oder JPEG) und Kommentar oder Exif-Daten
 
mal zwischendurch:

bin noch zusätzlich auf etwas gestoßen ...

Zitat:

For instance, in JPEG format, we use EXIF tags for summary information storage, so if you want to access the summary filed of a JPEG file, you have to use the standard EXIF way, every EXIF tag has a Tag ID, as defined, the following is the Tag IDs for common properties:


9c9b = Title

9c9c = Comment

9c9d = Author

9c9e = Keywords

9c9f = Subject

bedeutet also das M$ ihre infos doch als exif ablegt - zu den kennungen später mehr ....

soulies 5. Sep 2007 17:23

Re: JPG (oder JPEG) und Kommentar oder Exif-Daten
 
versuch einer erklärung:

in deinem jpg header findest du den tag FFE1 [der steht für EXIF daten]
-> wenn nun danach gleich der nächste tag mit FFxx kommt dann hast du keine EXIF daten

-> ansonsten mal ein kleiner ausschnitt (hex):
FF E1 00 56 45 78 69 66 00 00 49 49 2A 00 08 00 00 00 01 00 9C 9C 01 00 34 00 00 00 1A 00 00 00 ...

FF E1 -> EXIF Tag
00 56 -> Länge des Bereichs , also 86 Bytes
45 78 69 66 00 00 -> EXIF Name
49 49 -> Byte Order, hier Intel [Little Endian] !!! wichtig !!!
2A 00 -> TIFF Kennung (Tagged Image File Format)
08 00 00 00 -> IFD, File Descriptor - gibt an ob daten gleich folgen oder ob ein offset hinterlegt ist
01 00 -> Anzahl der EXIF Elemente - hier also 1

9C 9C -> EXIF Element - hier also Kommentar (s.o.)
01 00 -> Datentyp - hier Bytes
34 00 00 00 -> Länge - hier also 52 Bytes / Zeichen
1A 00 00 00 -> Entweder wert selbst oder offset wo daten zu finden sind - hier offset

nun könnte man also zur position 1A[hex] innerhalb der datei und von dort an 52 Bytes auslesen und man hätte den hinterlegten
kommentar ....


-> das schreiben erfolgt nun genauso
# prüfen ob Tag FF E1 vorhanden
- wenn nicht -> erzeugen
- wenn ja prüfen ob Element 9C9C vorhanden
- nein -> erzeugen
- ja -> inhalt abändern

beim schreiben auf die struktur achten -> !Byte Order!
und den richtigen Aufbau beibehalten - dann gibts keine Probleme ...

hoffe geholfen zu haben

cya Soulies

Ralf Stehle 5. Sep 2007 21:06

Re: JPG (oder JPEG) und Kommentar oder Exif-Daten
 
Super, das sind ja eine ganze Handvoll Tipps. Da das ganze für mich völlig neu ist, benötige ich aber einige Tage alles auszuprobieren. Ich hake die Frage daher erst mal als beantwortet ab. Falls ich einen vorzeigefähigen Code herausfinde, werde ich die nächsten Tage nochmals eine Antwort anhängen

Gruß
Ralf


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:32 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz