risolto - python - lettura dati IPTC

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
maresama
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1639
Iscrizione: mercoledì 9 gennaio 2008, 16:00

risolto - python - lettura dati IPTC

Messaggio da maresama »

da foto devo ricavare:
data di creazione
commenti (inseriti con gthumb)
per la data di creazione non ho avuto problemi
per i commenti invece non riesco a trovare dove sono (nb: dovrei anche modificarli)
Avevo in passato risolto il problema ma pyexiv2 è cambiato (uso python 2.7)
Per sapere i nomi delle chiavi di iptc (analogamente a quelli exif) ho fatto:
metadata = pyexiv2.ImageMetadata(nm)
metadata.read()
print metadata.iptc_keys
ma non mi da tutti i campi iptc, e comunque non quello con i commenti.
In realta i commenti sulla foto in esame ci sono e li vedo con gthumb
in http://tilloy.net/dev/pyexiv2/tutorial.html ci sono alcuni esempi e elenca queste chiavi:
>>> metadata.iptc_keys
  • ['Iptc.Application2.Caption',
    'Iptc.Application2.Writer',
    'Iptc.Application2.Byline',
    'Iptc.Application2.ObjectName',
    'Iptc.Application2.DateCreated',
    'Iptc.Application2.City',
    'Iptc.Application2.ProvinceState',
    'Iptc.Application2.CountryName',
    'Iptc.Application2.Category',
    'Iptc.Application2.Keywords',
    'Iptc.Application2.Copyright']
ma io trovo solo il primo.
Dove sbaglio?
grazie per l'aiuto.
Nexol
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1169
Iscrizione: venerdì 13 novembre 2009, 10:15

Re: risolto - python - lettura dati IPTC

Messaggio da Nexol »

Se riporti come hai risolto sarà d'aiuto anche per altri con lo stesso problema.
Ubuntu 20.04 --> Notebook Dell 1747 - Intel Core i7-720QM - 8GB Ram - Scheda grafica AMD Mobility Radeon HD 4650 1GB Ram con driver radeon
maresama
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1639
Iscrizione: mercoledì 9 gennaio 2008, 16:00

Re: risolto - python - lettura dati IPTC

Messaggio da maresama »

Allego la funzione che, sottolineo, è solo fatta per i miei problemi e non di uso generalizzato.
Legge e scrive solo alcune cose
Per le date ho scoperto che macchine foto diverse, usano campi diversi. Ho risolto (spero), con tentativi su varie chiavi

Codice: Seleziona tutto

def METADATI (nfile,modo,q=0,new=""):
#    nfile  :  percorso foto formato .JPG   
#    modo   :  'r'  lettura     'w' scrittura (solo per q=1 o q=7)   
#    q      :  numero dato desiderato: o,1,2,3,7
#               exif:   0: modello macch.foto     1 data creazione foto      2 risoluz. orizzontale
#                       3 risoluz. verticale      7 commmenti (x info foto)
#    new    :  per modo="w": nuovo dato     se q=1 deve essere: aaaa-mm-gg hh:mm:ss  
# << rc     :  0:OK  1:file inesist. o no .JPG/jpg, 2:q errato   3:scritt.no 1 o 7     4:new con data irregol.  
# << out    :  dato exif letto o scritto (new)
#----
# richiede: import pyexiv2
#              guida utilizzo di pyexiv2: http://tilloy.net/dev/pyexiv2/doc/release-0.2.2/index.html
# nb:  q=1 : se 'r' (data) infruttuosa, tenta con '4', poi con '9' e se ancora infruttuosa restituisce: 2000-01-01 00:00:00         
#      q=8 : in input prevede una stringa (no lista),  in out gfornisce una stringa (no pseudo lista con [' ']         
# esempio:  datah=METADATI ("/..../foto.JPG","r",1)   -> datah= ->  aaaa-mm-gg hh:mm:ss
#+++++++++++++
    def inout(q):
        nn=ord(q)-48
        key=tbc[nn][2:] 
        try: tag = metadata[key];  out=str(tag.value); out=out.strip()
        except: out=""
        return key,out 
    tbc=['0:Exif.Image.Model'                                    # modello macchina foto     'r' 
        ,'1:Exif.Photo.DateTime'                                 # data creazione foto       'r'  'w'
        ,'2:Exif.Photo.PixelXDimension'                          # risoluz. orizzontale      'r' 
        ,'3:Exif.Photo.PixelYDimension'                          # risoluz. verticale        'r' 
        ,'4:Exif.Photo.DateTimeOriginal'                         # data creazione foto       'r'  
        ,'5:'                                                    # 
        ,'6:'                                                    # 
        ,'7:Exif.Photo.UserComment'                              # usato x tipo foto         'r'  'w' 
        ,'8:Iptc.Application2.Caption'                           # commenti gthumb           'r'  'w'  
        ,'9:Exif.Image.DateTime'                                 # data creazione foto       'r'
        ]
    rc=0; out="" 
    try:  metadata = pyexiv2.ImageMetadata(nfile); metadata.read()
    except: rc=1
    if nfile[-4:] <> ".JPG" and nfile[-4:] <> ".jpg": rc=1
    if rc<>0:return rc,out 
    q=str(q) 
    if modo=="w":
       if q <> '8': new=new.strip()
       else: new=[new]
       if q=='1':
          if len(new)<>19 or new[4:5]<>'-' or new[7:8]<>'-' or new[10:11]<>' ' or new[13:14]<>':' or new[16:17]<>':': return 4,new
       elif q=='8': pass
       else: return 3,new
    else:
       if q not in '01234789': return 3,new 
    key,out=inout(q)
    if modo=="r":
       if q=='1':
          if out=="" or out[0:4]=="0000":
             key,out=inout('4')
             if out=="" or out[0:4]=="0000":
                key,out=inout('9')
                if out=="": out="2000-01-01 00:00:00"
       elif q=='8': out=out[2:-2]
       return 0,out 
    else:     
       try:    tag.value = new
       except: metadata[key]=new
       metadata.write()
       return 0,new
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 8 ospiti