myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grafik und Sound » EXIF Keywords von Bild ändern OHNE Bilderveränderung
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

EXIF Keywords von Bild ändern OHNE Bilderveränderung

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Black_Rider
myCSharp.de-Mitglied

Dabei seit: 26.11.2012
Beiträge: 11


Black_Rider ist offline

EXIF Keywords von Bild ändern OHNE Bilderveränderung

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
08.01.2020 18:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.315
Herkunft: BW


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
08.01.2020 18:50 Beiträge des Benutzers | zu Buddylist hinzufügen
Black_Rider
myCSharp.de-Mitglied

Dabei seit: 26.11.2012
Beiträge: 11

Themenstarter Thema begonnen von Black_Rider

Black_Rider ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
08.01.2020 19:03 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.315
Herkunft: BW


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
08.01.2020 19:13 Beiträge des Benutzers | zu Buddylist hinzufügen
Jake Jake ist männlich
myCSharp.de-Mitglied

avatar-1878.jpg


Dabei seit: 11.04.2006
Beiträge: 193
Entwicklungsumgebung: Visual Studio, VS4Mac, Rider


Jake ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Jake am 09.01.2020 07:24.

08.01.2020 19:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
witte
myCSharp.de-Mitglied

Dabei seit: 03.09.2010
Beiträge: 928


witte ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@Jake: korrigiere mal deinen Link.
08.01.2020 22:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Jake Jake ist männlich
myCSharp.de-Mitglied

avatar-1878.jpg


Dabei seit: 11.04.2006
Beiträge: 193
Entwicklungsumgebung: Visual Studio, VS4Mac, Rider


Jake ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von witte:
@Jake: korrigiere mal deinen Link.

Danke für den Hinweis. Ist korrigiert.
09.01.2020 07:25 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Black_Rider
myCSharp.de-Mitglied

Dabei seit: 26.11.2012
Beiträge: 11

Themenstarter Thema begonnen von Black_Rider

Black_Rider ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen

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

C#-Code:
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
09.01.2020 19:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.572
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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#

Zitat:
The trick is to rotate the picture by 90 degrees. In this case the framework supplies a lossless rewriting of a jpeg file
09.01.2020 19:56 Beiträge des Benutzers | zu Buddylist hinzufügen
Black_Rider
myCSharp.de-Mitglied

Dabei seit: 26.11.2012
Beiträge: 11

Themenstarter Thema begonnen von Black_Rider

Black_Rider ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
09.01.2020 21:36 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 10 Monate.
Der letzte Beitrag ist älter als 10 Monate.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 05.12.2020 23:27