el catala | Bonjour,
Pour classer mes photos, je travaille à la mise au point d' une application sous LibreOffice Base. Débutant en Python, j' ai démarré une macro qui me permet de récupérer les données exifs.
Voici le programme en cours de développement:
Code :
- #!/usr/bin/env python3
- from uno import *
- from exiftool import *
- from datetime import datetime
- from fractions import *
- from sys import *
- from os import chdir
- # Sélectionner une photographie
- fchslc = ' '
- def fntslc(event=None):
- ctx = XSCRIPTCONTEXT.getComponentContext()
- create = ctx.ServiceManager.createInstance
- filepicker = create("com.sun.star.ui.dialogs.FilePicker" )
- filepicker.execute()
- global fchslc
- fchslc = filepicker.Files[0]
- dmspht = ' '; dtpht = ' ';hrpht = ' '; exp = ' '; vrtbjc = ' ';flash = ' '
- def dnxf():
- # Dimension de la photo
- global dmpht
- dmspht = lrg, ' x ',htr
- # Extraction de la date et de l' heure de prise de vue
- dt = datetime.strptime(dtcrt,"%Y:%m:%d %H:%M:%S" )
- global dtpht; global hrpht
- dtpht = dt.strftime('%d-%m-%Y')
- hrpht = dt.strftime('%H:%M:%S')
- # Temps d' exposition
- global exp
- #x = int(1 / tmpxps)
- #exp = Fraction(1,x)
- # Ouverture
- global vrtbjc
- y = vrt
- vrtbjc = format(y, '0.1f')
- # Flash actif
- global flash
- if flash == 16:
- flash = 'Inactif'
- else:
- flash = 'Actif'
- fntslc() #Ouverture de la fenêtre de sélection d' un fichier
- # Recherche des balises du chemin du fichier
- bls = '/' #Extraction de la position du caractère h
- pstbls = fchslc.rfind(bls,0,4)
- bls1 = '/'
- xbls1 = fchslc.count(bls1) #Extraction de la position du caractère s
- i = 0
- while i <= xbls1:
- pstbls1 = fchslc.rfind(bls1)
- i = i + 1
- bls2 = '.'
- pstbls2 = fchslc.rfind(bls2)
- # Chemin du fichier
- chmfch = fchslc[pstbls:pstbls1 + 1]
- # Nom de la photo
- nmpht = fchslc[pstbls1 + 1:pstbls2]
- # Type d' extention du fichier
- xtn = fchslc[pstbls2 + 1:]
- # Fichier actuel
- fchact = fchslc
- #Extraction du fabricant de l' appareil
- with ExifTool() as e:
- marque = e.get_tag('Make', fchact)
- # Sélection de la procédure en fonction du fabricant de l' appareil
- if marque == None:
- print ("Il n' y a pas de données exif pour cette photographie !" )
- marque = 'Inconnue'; mdl = 'Inconnue'; dtpht = 'Inconnue'; hrpht = 'Inconnue'
- dmspht = 'Inconnue'; tmpxps = 'Inconnue'; fcl = 'Inconnue'; lngfcl = 'Inconnue'
- iso = 'Inconnue'; vrtbjc = 'Inconnue'; lmn = 'Inconnue'; flash = 'Inconnue'
- bjc = 'Inconnue'
- elif marque == 'Canon':
- with ExifTool() as e:
- mdl = e.get_tag('Model', fchact) # Modèle appareil
- dtcrt = e.get_tag('DateTimeOriginal', fchact) # Date et heure prise de vue
- lrg = e.get_tag('ImageWidth', fchact) # Largeur photo
- htr = e.get_tag('ImageHeight', fchact) # Hauteur photo
- tmpxps = e.get_tag('ExposureTime', fchact) # Temps d' exposition
- fcl = e.get_tag('FNumber', fchact) # Focale
- lngfcl = e.get_tag('FocalLength', fchact) # Longueur de focale
- iso = e.get_tag('Iso', fchact) # Sensibilité
- vrt = e.get_tag('ApertureValue', fchact) # Ouverture objectif
- lmn = e.get_tag('LightValue', fchact) # Luminosité
- flash = e.get_tag('Flash', fchact) # Position flash
- bjc = e.get_tag('lenstype', fchact) # Objectif utilisé
- dnxf()
- elif marque == 'FUJIFILM':
- with ExifTool() as e:
- mdl = e.get_tag('Model', fchact) # Modèle appareil
- dtcrt = e.get_tag('DateTimeOriginal', fchact) # Date et heure prise de vue
- lrg = e.get_tag('ImageWidth', fchact) # Largeur photo
- htr = e.get_tag('ImageHeight', fchact) # Hauteur photo
- tmpxps = e.get_tag('ExposureTime', fchact) # Temps d' exposition
- fcl = e.get_tag('FNumber', fchact) # Focale
- lngfcl = e.get_tag('FocalLength', fchact) # Longueur de focale
- iso = e.get_tag('Iso', fchact) # Sensibilité
- vrt = e.get_tag('ApertureValue', fchact) # Ouverture objectif
- lmn = e.get_tag('LightValue', fchact) # Luminosité
- flash = e.get_tag('Flash', fchact) # Position flash
- bjc = e.get_tag('lenstype', fchact) # Objectif utilisé
- dnxf()
- else:
- with ExifTool() as e:
- mdl = e.get_tag('Model', fchact) # Modèle appareil
- dtcrt = e.get_tag('DateTimeOriginal', fchact) # Date et heure prise de vue
- lrg = e.get_tag('ImageWidth', fchact) # Largeur photo
- htr = e.get_tag('ImageHeight', fchact) # Hauteur photo
- tmpxps = e.get_tag('ExposureTime', fchact) # Temps d' exposition
- fcl = e.get_tag('FNumber', fchact) # Focale
- lngfcl = e.get_tag('FocalLength', fchact) # Longueur de focale
- iso = e.get_tag('Iso', fchact) # Sensibilité
- vrt = e.get_tag('ApertureValue', fchact) # Ouverture objectif
- lmn = e.get_tag('LightValue', fchact) # Luminosité
- flash = e.get_tag('Flash', fchact) # Position flash
- bjc = e.get_tag('lenstype', fchact) # Objectif utilisé
- dnxf()
- # Creation du fichier de sauvegarde
- chdir('/home/elfouste/Documents/Python/MacroPython/Tst_Fch')
- fch = 'FchDn.txt'
- with open('FchDn.txt', 'w') as fch:
- fch.write(chmfch)
- # fch.write(nmpht)
- # fch.write(xtn)
- # fch.write(dtpht)
- # fch.write(hrpht)
- # fch.write(marque)
- # fch.write(mdl)
- # fch.write(str(dmspht))
- # fch.write(str(tmpxps))
- # fch.write(str(fcl))
- # fch.write(str(lngfcl))
- # fch.write(str(iso))
- # fch.write(str(bjc))
- # fch.write(str(vrtbjc))
- # fch.write(str(lmn))
- # fch.write(str(flash))
- #sys.exit()
|
Son exécution est déclenché par pression sur un bouton du formulaire de LO. Je peux sélectionner une photo mais par la suite, j' ai le message d' erreur contenu dans le lien ci-dessous:
[img] [/img]
Je ne comprends pas pourquoi l' erreur mentionne "JSON" alors que je ne fait pas appel à ce type de langage.
Pourriez-vous m' en dire plus.
Cordialement
PS Je suis sous Xubuntu 18.04, Libre Office 6.02 et python 3.6
|