Laden...

EXIF Keywords von Bild ändern OHNE Bilderveränderung

Erstellt von Black_Rider vor 4 Jahren Letzter Beitrag vor 4 Jahren 2.593 Views
B
Black_Rider Themenstarter:in
12 Beiträge seit 2012
vor 4 Jahren
EXIF Keywords von Bild ändern OHNE Bilderveränderung

Hallo zusammen

Ich will für meine Bildergallerie die Keywords (Markierungen) meiner Bilder (JPG) mittels C# automatisch setzten.
Sprich: Rechtsklick auf das Bild --> Eigenschaften --> Details --> Markierungen. Dieses Feld will ich auslesen und beschreiben.

Dazu gibt es im Internet viele Beispielcodes, welche auch funktionieren. Leider wird darin immer das Bild geladen und dann wieder gespeichert. Dadurch habe ich aber eine Bildveränderung, welche ich nicht will. Denn ich habe dabei teilweise eine Dateigrössenhalbierung, also Datenverlust.

Wie kann ich diese Einträge bearbeiten ohne das mein Bild verändert wird (jeder Pixel soll so bleiben wie er ist)?

Gruss

Black_Rider

16.806 Beiträge seit 2008
vor 4 Jahren

So funktioniert leider EXIF nicht, daher kann diese Erwartungshaltung nicht erfüllt werden.

Um EXIF Informationen zu erhalten, muss das ganze Bild geladen werden.
Entsprechend muss bei einer Änderung auch das Bild wieder encoded werden, um dieses zu speichern.

Was Du also suchst ist eine Bibliothek, die zur Änderung (aller Metadaten, auch EXIF) das selbe Encoding verwendet.
Das Problem ist: Du kannst das Encoding nicht auslesen, daher weißt Du beim Schreiben nicht, was verwendet wurde.

Es ist ohne hellseherische Fähigkeiten unmöglich dies generisch umzusetzen.

B
Black_Rider Themenstarter:in
12 Beiträge seit 2012
vor 4 Jahren

Hallo Abt

Vielen Dank für Deine Antwort.

Gut, dann anders:
Wie encode ich es beim speichern wieder gleich wie es war? Bzw. wie bringe ich das ganze ohne Qualitätsverlust hin?

Ich könnte auch noch alternativen verwenden. Unterstützt wird: EXIF, XMP und IPTC, falls das etwas bringt.

Gruss

Black_Rider

16.806 Beiträge seit 2008
vor 4 Jahren

Wie bereits gesagt; nicht (so wirklich) möglich - zumindest nicht für die gängigen Bilddateien, da die Metadaten Teil des Bilds sind und nirgends das verwendete Encoding hinterlegt wird.
Du kannst Dir höchstens ne Bibliothek wie exiv2 suchen, die versucht das Encoding zu ermitteln - aber ich weiß aus Erfahrung, dass auch exiv2 nicht hellsehen kann.

Mit .NET Bitmap-Mittel keine Chance.

193 Beiträge seit 2006
vor 4 Jahren

Schau dir mal ExifLibNet an.

Damit kann man die Exif-Metadaten von Bildformaten bearbeiten. Die eigentlichen Bild-Daten werden dabei nicht verändert; sprich, das Bild selbst bleibt unangetastet.

Gruß Jake

W
955 Beiträge seit 2010
vor 4 Jahren

@Jake: korrigiere mal deinen Link.

193 Beiträge seit 2006
vor 4 Jahren

@Jake: korrigiere mal deinen Link.

Danke für den Hinweis. Ist korrigiert.

B
Black_Rider Themenstarter:in
12 Beiträge seit 2012
vor 4 Jahren

Hallo zusammen

Dankeschön für den Tipp mit ExifLibNet, jedoch ist hier das gleiche.

           
ImageFile data;
data = ImageFile.FromFile(Path_s);
data.Save(Path_d);

Bild von Path_s = 153 KB
Bild von Path_d = 117 KB

Gruss

Black_Rider

5.657 Beiträge seit 2006
vor 4 Jahren

Mit ExifLibNet kannst du nur die EXIF-Daten ändern. Hast du mal die beiden Dateien miteinander verglichen, was sich da genau geändert hat?

Das ganze geht übrigens auch mit einem Trick mit dem normalen .NET Framework: Lossless JPEG Rewrites in C#

The trick is to rotate the picture by 90 degrees. In this case the framework supplies a lossless rewriting of a jpeg file

Weeks of programming can save you hours of planning

B
Black_Rider Themenstarter:in
12 Beiträge seit 2012
vor 4 Jahren

Hallo zusammen

Muss mich entschuldigen. Hatte einen Fehler in der Kontrollroutine. Ich prüfe das neue Bild mit dem alten Pixel für Pixel und hatte dort einen Fehler drin.

Mit ExifLibNet funktioniert es. Jeder Pixel ist noch gleich.
Mit dem 90° Trick zeigt er jedoch Differenzen.

Herzlichen Dank für Eure Hilfe/Zeit.

Grüsse

Black_Rider