Modul pyexif2 Problem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
BlackJack

@Hein_nieH: Die elegante Lösung wäre wohl die richtige Kodierung zu verwenden:

Code: Alles auswählen

In [11]: u'Hällö'.encode('utf16')[2:]
Out[11]: 'H\x00\xc3\x00\xa4\x00l\x00l\x00\xc3\x00\xb6\x00'
Hein_nieH
User
Beiträge: 18
Registriert: Dienstag 24. Januar 2012, 13:21
Wohnort: Rostock

Hallo BlackJack,

habe ich proiert funzt aber nicht.
Wie muesste denn er Code deiner Meinung nach geändert werden?

Wie bereits gesagt, ich bin nur durch experimentieren darauf gekommen.

Gruss Hein_nieh
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hein_nieH hat geschrieben: habe ich proiert funzt aber nicht.
Zeig uns doch mal Deinen Versuch - und präzisiere, was "funzt nicht" bedeutet ;-) (Ok, in diesem Kontext nehme ich mal an, dass es wie früher einfach keine Änderung gubt - aber so etwas solltest Du *immer* explizit schreiben)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Hein_nieH
User
Beiträge: 18
Registriert: Dienstag 24. Januar 2012, 13:21
Wohnort: Rostock

Code: Alles auswählen

y=y.encode('utf16')[2:]
metadata['Exif.Image.XPComment'].value=y
Statt y=y.replace(' ',' 0 ') habe ich es mit y=y.encode('utf16')[2:]
versucht.
In der jpg-Datei sieht man dann nur ein einzelnes Zeichen.
Verewendet man die replace-Methode, so ist der übergebene String in der jpg-Datei vollständig sichtbar.
Ich vermute jedoch, dass das Modul pyexiv2 insichtlich dieser Tags noch eine Macke hat, siehe auch den Kommentar von /me.

Gruss hein_nieH
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du rufst `encode` auf dem falschen Objekt auf - sofern Deine Bezeichner mit obigen Code übereinstimmen¹. Du musst das mit dem `x`-Objekt aufrufen - der Typ von `y` ist doch irgend etwas "verqueres" - oder was sagt Dir `type(y)` ohne das `encode`?

¹`x` und `y` sind eher schlechte Namen in diesem Kontext! Die sagen nichts aus...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Hein_nieH
User
Beiträge: 18
Registriert: Dienstag 24. Januar 2012, 13:21
Wohnort: Rostock

....aha.
So funktioniert es:

Code: Alles auswählen

Text=u'Ha Ha Ha Ha Oho'
Text=Text.encode('utf16')[2:]
TextNachUtils = pyexiv2.utils.string_to_undefined(Text)
metadata['Exif.Image.XPComment'].value = TextNachUtils
metadata.write()
... war ein Denkfehler von mir.

Gruss Hein_nieH
Antworten