Entwickler-Ecke
Multimedia / Grafik - JPG bearbeiten
GuaAck - Sa 10.07.21 23:52
Titel: JPG bearbeiten
Hallo,
letzter Beitrag zu diesem Thema war vor 6 Monaten, aber vielleicht liest das hier ja jemand und hat einen Tipp.
Ich möchte in eine größere Anzahl JPG-Fotos Text einfügen, z. B. den Dateinamen.
Der folgende Code scheint einwandfrei zu arbeiten, aber leider ist die gespeicherte JPG identisch zu der geladenen, funktioniert also NICHT:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| PROCEDURE TFTextinJPG.Button1Click(Sender: TObject);
CONST Pfad0 = 'D:\Fotos\Delphi\TextinJPG\Test0\'; Pfad1 = 'D:\Fotos\Delphi\TextinJPG\Test1\'; Filename = 'Testbild.JPG'; VAR Bild1, Bild2: tjpegimage;
BEGIN Bild1 := tjpegimage.Create; Bild2 := tjpegimage.Create;
Bild1.LoadFromFile(Pfad0 + Filename); Bild1.Canvas.font.Size := 100; Bild1.Canvas.font.Color := clred; Bild1.Canvas.TextOut(200, 200, Filename); Bild1.SaveToFile(Pfad1 + Filename);
Bild1.Free; Bild2.Free; END; |
Kopiere ich aber das JPG-Bild zur Bearbeitung in eine Bitmap und dann wieder zurück in ein tjpegimage, dann funktioniert es. Leider sind dann die Metadaten des JPG weg, was logisch ist.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| PROCEDURE TFTextinJPG.Button1Click(Sender: TObject); CONST Pfad0 = 'D:\Fotos\Delphi\TextinJPG\Test0\'; Pfad1 = 'D:\Fotos\Delphi\TextinJPG\Test1\'; Filename = 'Testbild.JPG'; VAR Bild1, Bild2: tjpegimage; bmp: Tbitmap;
BEGIN Bild1 := tjpegimage.Create; Bild2 := tjpegimage.Create; Bmp := TBitmap.Create;
Bild1.LoadFromFile(Pfad0 + Filename); Bmp.Assign(Bild1); Bmp.Canvas.font.Size := 100; Bmp.Canvas.font.Color := clred; Bmp.Canvas.TextOut(200, 200, Filename); Bild2.Assign(Bmp); Bild2.SaveToFile(Pfad1 + Filename);
Bild1.Free; Bild2.Free; Bmp.Free; END; |
Wäre schön, jemand hätte einen Tipp.
Viele Grüße
GuaAck
jaenicke - So 11.07.21 13:58
Ein kurzer Blick in den Debugger zeigt, dass SaveToFile selbst JPEGNeeded auifruft, dort aber bei vorhandenen Jpeg-Daten die Bitmap, in der gezeichnet wurde, gar nicht verwendet wird.
Du musst also manuell Compress vor dem SaveToFile aufrufen (und ggf. auch die Qualität vorher setzen).
GuaAck - Sa 21.08.21 22:54
Hallo Jaenicke,
Danke nach längerer Zeit, in der ich nicht zu diesem Problem gekommen bin. Jetzt habe ich es mit dem zusätzlichen "compress" probieren können. Meine in Canvas gemalte Änderung wird korrekt ins JPG übernommen, perfekt!!
Die Metadaten sind allerdings trotzdem verloren, vermutlich unterstützt schon tjpegimage keine Metadaten.
Es gibt eine Library dExif, mit der man die EXIF-Daten sehr gut lesen und darstellen kann, habe ich probiert. Die soll auch einem geänderten Bild EXIF-Daten hinzufügen können. Mein damit erstelltes Programm läuft zwar durch, aber das resultierende *.JPG kann von einschlägigen Fotoprogrammen nicht geöffnet werden. (Die Dateilänge ist plausibel.)
Danke also,
Gruß
GuaAck
GuaAck - So 22.08.21 10:32
Jetzt geht es, da stand in der dExif.pas an einer Stelle noch "STRING" statt "ANSISTRING".
Gruß
GuaAck
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!