[Résolu]-[Python] Plantage extraction photo via fchslc

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur: Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !

[Résolu]-[Python] Plantage extraction photo via fchslc

Messagepar Ernest » 13 Juin 2019 20:13

Bonsoir,

Je rencontre un gros problème dans le développement d' une macro Python. En effet, alors que depuis une console Linux, la macro fonctionne bien, elle plante systématiquement lorsque je la lance depuis un formulaire LO base.
Lorsque je lance la macro depuis une console, fchslc contient le chemin d' une photo.
La sélection d' une photo depuis le formulaire LO Base fonctionne aussi puisque, je peux extraire le chemin de la photo, son nom ainsi que l' extension du fichier depuis la variable fchslc.
Par contre dès que je tente d' extraire les données exif, c' est le blocage.
Voici le code de la macro:
Code : Tout sélectionner   AgrandirRéduire
#!/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 = '/'
pstbls = fchslc.rfind(bls,0,10)
xbls = fchslc.count(bls)
i = 0
while i <= xbls:
    pstbls1 = fchslc.rfind(bls)
    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:]

#Extraction du fabricant de l' appareil
with ExifTool() as e:
    marque = e.get_tag('Make', fchslc)
# 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', fchslc)      # Modèle appareil
        dtcrt = e.get_tag('DateTimeOriginal', fchslc)   # Date et heure prise de vue
        lrg = e.get_tag('ImageWidth', fchslc)      # Largeur photo
        htr = e.get_tag('ImageHeight', fchslc)      # Hauteur photo
        tmpxps = e.get_tag('ExposureTime', fchslc)   # Temps d' exposition
        fcl = e.get_tag('FNumber', fchslc)      # Focale
        lngfcl = e.get_tag('FocalLength', fchslc)   # Longueur de focale
        iso = e.get_tag('Iso', fchslc)         # Sensibilité
        vrt = e.get_tag('ApertureValue', fchslc)   # Ouverture objectif
        lmn = e.get_tag('LightValue', fchslc)       # Luminosité
        flash = e.get_tag('Flash', fchslc)      # Position flash
        bjc = e.get_tag('lenstype', fchslc)      # Objectif utilisé
        dnxf()
elif marque == 'FUJIFILM':
    with ExifTool() as e:
        mdl = e.get_tag('Model', fchslc)      # Modèle appareil
        dtcrt = e.get_tag('DateTimeOriginal', fchslc)   # Date et heure prise de vue
        lrg = e.get_tag('ImageWidth', fchslc)      # Largeur photo
        htr = e.get_tag('ImageHeight', fchslc)      # Hauteur photo
        tmpxps = e.get_tag('ExposureTime', fchslc)   # Temps d' exposition
        fcl = e.get_tag('FNumber', fchslc)      # Focale
        lngfcl = e.get_tag('FocalLength', fchslc)   # Longueur de focale
        iso = e.get_tag('Iso', fchslc)         # Sensibilité
        vrt = e.get_tag('ApertureValue', fchslc)   # Ouverture objectif
        lmn = e.get_tag('LightValue', fchslc)       # Luminosité
        flash = e.get_tag('Flash', fchslc)      # Position flash
        bjc = e.get_tag('lenstype', fchslc)      # Objectif utilisé
        dnxf()
else:
    with ExifTool() as e:
        mdl = e.get_tag('Model', fchslc)      # Modèle appareil
        dtcrt = e.get_tag('DateTimeOriginal', fchslc)   # Date et heure prise de vue
        lrg = e.get_tag('ImageWidth', fchslc)      # Largeur photo
        htr = e.get_tag('ImageHeight', fchslc)      # Hauteur photo
        tmpxps = e.get_tag('ExposureTime', fchslc)   # Temps d' exposition
        fcl = e.get_tag('FNumber', fchslc)      # Focale
        lngfcl = e.get_tag('FocalLength', fchslc)   # Longueur de focale
        iso = e.get_tag('Iso', fchslc)         # Sensibilité
        vrt = e.get_tag('ApertureValue', fchslc)   # Ouverture objectif
        lmn = e.get_tag('LightValue', fchslc)       # Luminosité
        flash = e.get_tag('Flash', fchslc)      # Position flash
        bjc = e.get_tag('lenstype', fchslc)      # 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()

Pour info je joins le texte de l' erreur;
h**ps://www.noelshack.com/2019-24-1-1560183742-erreur.png
Je ne comprends pas cette erreur. En effet, elle fait référence au module json alors que je ne l' utilise pas.
Auriez-vous une idée?
Cordialement
Pièces jointes
Phototeque_01.odb
(13.99 Kio) Téléchargé 13 fois
Dernière édition par Ernest le 14 Juin 2019 19:36, édité 1 fois.
Xubuntu 18.04
Libre Office 6.2.0.3
Avatar de l’utilisateur
Ernest
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 70
Inscrit le : 26 Fév 2019 15:56

Re: [Python]-Erreur macro

Messagepar Bidouille » 13 Juin 2019 20:25

Pour la bonne tenue de ce forum, veillez à :
  1. Ne pas héberger d'image en dehors du forum.
  2. Mettre un titre explicite reflétant le problème exposé en évitant les termes implicites.
Fait à votre place pour cette fois.
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
 
Message(s) : 10182
Inscrit le : 08 Nov 2005 17:23
Localisation : Brest, France

Re: [Python] Plantage extraction photo via fchslc

Messagepar Hubert Lambert » 14 Juin 2019 09:15

Bonjour,

Ernest a écrit:Lorsque je lance la macro depuis une console, fchslc contient le chemin d' une photo.

As-tu essayé de voir ce que cette variable contient, dans LibreOffice, au moment de la passer à exiftools ?
AOOo 4.1.2 sur Win7
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1137
Inscrit le : 06 Avr 2016 08:26

Re: [Python] Plantage extraction photo via fchslc

Messagepar Ernest » 14 Juin 2019 17:25

Bonsoir,
Effectivement, j' ai contrôlé le contenu de la variable. Après lancement depuis LO Base, elle contient bien le chemin du fichier avec le nom du fichier ainsi que son extension. J' arrive sans soucis à isoler depuis cette variable les informations suivantes par exemple:
Chemin : /home/elfouste/Images
Nom : IMG_001
Extension : jpg
Par contre, dès que je cherche les données exif, c' est là que j' obtiens ce message d' erreur notant le soucis avec le module json.
Par acquis de conscience, j' ai tenté d' utiliser ce module. Le résultat a été identique. Temps que je n' ai pas cherché à récupérer les données exifs, la macro a fonctionné. Par contre, dés que j' ai voulu récupérer le nom du fabricant , j' ai eu droit au même message d' erreur!!!
Le problème pourrait-il venir d' une incompatibilité de LO Base et de Python. Je précise que je suis sous Firebird et non en HSQLBD.
Cordialement
Xubuntu 18.04
Libre Office 6.2.0.3
Avatar de l’utilisateur
Ernest
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 70
Inscrit le : 26 Fév 2019 15:56

Re: [Python] Plantage extraction photo via fchslc

Messagepar Hubert Lambert » 14 Juin 2019 18:21

Pourras-tu donner le contenu exact de la variable ?
Parce que pour ce que je comprends, tu récupères une url interne à LibO, commençant par "file:///", incompréhensible pour python.
Essaie aussi de faire une recherche avec le mot clé fileUrlToSystemPath.
AOOo 4.1.2 sur Win7
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1137
Inscrit le : 06 Avr 2016 08:26

Re: [Python] Plantage extraction photo via fchslc

Messagepar Ernest » 14 Juin 2019 19:33

Bonsoir,

Vous avez raison, la variable fchslc contient les données suivantes:file:///home/elfouste/Images/001.JPG. J' ai donc créer une nouvelle variable qui reçoit /home/elfouste/Images/001.JPG. En utilisant cette nouvelle variable pour extraire les données exifs, je récupère bien les données recherchées.
Le problème est donc réglé.
Merci Hubert Lambert car sans vous j' étais bloqué. Je vais pouvoir me pencher maintenant sur le traitement des données car certains résultats sont trop mathématiques et peu "photographiques" :D

Cordialement
Xubuntu 18.04
Libre Office 6.2.0.3
Avatar de l’utilisateur
Ernest
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 70
Inscrit le : 26 Fév 2019 15:56


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : luky-luke et 8 invité(s)