Gérer commentaire d'un jpg en Python

Questions générales en Français

Moderators: XnTriq, xnview

Post Reply
User avatar
ramses
Posts: 26
Joined: Sun Jan 10, 2010 10:54 pm

Gérer commentaire d'un jpg en Python

Post by ramses » Sat Jun 29, 2019 7:38 pm

Bonjour
Après avoir saisi et commenté quelques milliers de photos avec XnView, j'aimerai pouvoir les traiter en Python. Pour les données EXIF et IPTC/XMP il y a des modules adaptées.
Mais pour le commentaire intégré un peu d'aide serait la bienvenue. J'ai vu que cette chaîne, sous forme de bytes, se trouve dans XnView après \xff\xfe au début du fichier, mais il me semble avoir compris qu'elle pourrait être aussi bien à la fin.
Comment pouvoir lire cette chaîne dans un programme ? en créer une nouvelle ? modifier l’existante ? y a t'il des spécifications particulières sur le contenu et la position ?
Merci de votre aide et à XnView pour le chef d’œuvre !
Jean
LinuxMint 15 / XnView MP 0.64

User avatar
xnview
Author of XnView
Posts: 31373
Joined: Mon Oct 13, 2003 7:31 am
Location: France
Contact:

Re: Gérer commentaire d'un jpg en Python

Post by xnview » Sun Jun 30, 2019 8:29 am

il faut voir du coté du format JPEG
Pierre.

User avatar
ramses
Posts: 26
Joined: Sun Jan 10, 2010 10:54 pm

Re: Gérer commentaire d'un jpg en Python

Post by ramses » Mon Jul 01, 2019 2:40 pm

Merci Pierre
Un peu de travail sur les chaînes de bytes, mais ça a l'air de marcher
Jean
LinuxMint 15 / XnView MP 0.64

User avatar
ramses
Posts: 26
Joined: Sun Jan 10, 2010 10:54 pm

Re: Gérer commentaire d'un jpg en Python

Post by ramses » Sat Aug 03, 2019 3:15 pm

Re Bonjour
Bien qu'en travaillant sur le format binaire du fichier et en suivant les spécifications du JPEG, j'arrive à mes fins, j'ai finalement adopté une autre approche plus sécurisée et plus versatile. J'indique ceci pour ceux qui auraient les même besoins.
A l'aide du module subprocess de Python, j'invoque les commandes batch du module exiv2(metadata de multiples formats)
Par exemple pour extraire le commentaire:

Code: Select all

import subprocess
def exec_bash(bash_string):
	global pipo #un subprocess.PIPE doit être défini préalablement, réutilisable
	#la chaine Bash doit être découpée en parties
	#on récupère le stdout par le PIPE
	#la chaine de bytes est décodée, le \n final est supprimé
	return subprocess.run(bash_string.split(),  stdout=pipo).stdout.decode()[0:-1]
pipo=subprocess.PIPE
bashComment='exiv2 -pc '
phot="xxxx.jpg"
comment=exec_bash(bashComment+phot)
Et merci encore à Pierre
Jean
LinuxMint 15 / XnView MP 0.64

Post Reply