Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/07/2011, à 19:40

UbuntOlivier

[script] Afficher les données EXIF dans une fenêtre yad

Bonjour la Communauté,

J'ai écrit un script [bd]ash qui permet d'afficher les données EXIF d'une photo JPG ainsi que sa vignette dans une boîte de dialogue YAD (yad offre plus de possibilités que zenity).

Perso, je l'ai mis en menu contextuel de thunar, comme action personnalisée (UCA, User Customizable Actions), mais ce n'est pas obligatoire, on peut le lancer à partir de n'importe quel environnement graphique.

Il utilise yad, exiv2, column, grep, sed, et teste la disponibilité de ces utilitaires. Sinon, il s'interrompt proprement.

EDIT 2011-07-10 : v0.3 (+colonnes EXIF alignées)

#!/bin/sh
# Both bash and dash should work

#-FILE------------------------------------------------------------------
#
#      thunar-EXIF.yad
#
#-PURPOSE---------------------------------------------------------------
#
#      Originally, for XFCE Thunar UCA (User Customizable Action)
#      Displays EXIF data + thumbnail of a photo in a yad dialog box
#
#-SYNTAX---------------------------------------------------------------
#
#      To be called with: thunar-EXIF.yad %n
#      !!! in Thunar-UCA: just %n, no 'quotes', no "quotes" !!!
#
#-DEPENDENCIES----------------------------------------------------------
#
#      - column
#      - exiv2
#      - grep
#      - sed
#      - yad
#
#-VERSIONS--------------------------------------------------------------
#
#      2011-07-10 : v0.3 / + EXIF fields aligned in neat columns
#                                  (important for non English languages)
#      2011-07-07 : v0.2 / + _Open (photo in favourite image viewer)
#                          + gtk-buttons
#      2011-07-06 : v0.1 / + First release
#
#-LICENSE---------------------------------------------------------------
#
#      Copyright 2011 Olivier BOURSIN <o.boursin@gmail.com>
#
#      This program is free software; you can redistribute it and/or modify
#      it under the terms of the GNU General Public License as published by
#      the Free Software Foundation; either version 2 of the License, or
#      (at your option) any later version.
#
#      This program is distributed in the hope that it will be useful,
#      but WITHOUT ANY WARRANTY; without even the implied warranty of
#      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#      GNU General Public License for more details.
#
#      You should have received a copy of the GNU General Public License
#      along with this program; if not, write to the Free Software
#      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#      MA 02110-1301, USA.
#
#-----------------------------------------------------------------------

#
# LANGUAGE SETTINGS
#

# Your own language here…
# Type ' echo ${LANG%_*} ' in a terminal to check your language code
case ${LANG%_*} in
    fr)
        # Error texts (e_)
        e_Title="Utilitaire manquant"
        e_Text="Désolé !\n\nPour afficher les données EXIF,\nj'ai besoin d'avoir accès aux utilitaires suivants :\n"
        # EXIF texts (x)
        xTitle="Données EXIF"
        ;;
    en|*) # English + fallback
        # Error texts (e_)
        e_Title="Utility missing"
        e_Text="Sorry!\n\nIn order to display the EXIF data,\nI need access to following utilities:\n"
        # EXIF texts (x)
        xTitle="EXIF Data"
        ;;
esac

#
# HAVE WE GOT EVERYTHING WE NEED ?
#

# Test dependencies - Abort if something is missing
appDIALOG="yad"
listeAPPS="column exiv2 grep sed $appDIALOG"
manqueAPPS=""
for appUTILE in $listeAPPS ; do
    [ "$(which $appUTILE 2>/dev/null)" = "" ] \
        && manqueAPPS="$manqueAPPS\n$appUTILE"
done
if [ "$manqueAPPS" != "" ] ; then
    # Display error message
    if [ "$(which $appDIALOG 2>/dev/null)" = "" ] ; then
        echo "$e_Text$manqueAPPS" | sed s/"\\\n"/" "/g ;
    else
        # Prepare markup
        yText="$e_Text <tt><b><span fgcolor='blue'>$manqueAPPS</span></b></tt>"
        $appDIALOG --window-icon="camera"  \
                   --title "$e_Title"       \
                   --image="error"         \
                   --fixed                 \
                   --mouse                 \
                   --button="gtk-cancel:1" \
                   --text "$yText" ;
    fi
    # Abort script
    exit 1
fi

#
# EVERYTHING WE NEED IS THERE, SO LET'S DO IT!
#

# White spaces in filename are handled from here
yPhoto="$1"
yVignette=${yPhoto%.*}     # strips last suffix
yVignette=${yVignette##*/} # strips directories
yRepTemp="/tmp"
yVignette="$yRepTemp/$yVignette-thumb.jpg"

yImage=$(exiv2 -et "$yPhoto"            \
               -l $yRepTemp 2>/dev/null \
        ; echo "$yVignette")
yText="<tt>$(exiv2 -u "$yPhoto" | sed s/:/#:/ | column -ts#)</tt>"
# Other possibilities
#yText="<tt>$(exiv2 -u "$yPhoto" | sed s/:/#:/ | column -ts# | sed s/\ :/:/)</tt>"
#yText="<tt>$(exiv2 -u "$yPhoto" | sed s/:/#:/ | column -ts# | grep -ve '.*: $')</tt>"

yad --window-icon="camera" \
    --title="$xTitle"      \
    --image="$yImage"      \
    --dialog-sep           \
    --button="gtk-open:10" \
    --button="gtk-close:0" \
    --fixed                \
    --text="$yText"

yChoix=$?

# Cleanup
rm "$yVignette" #2>/dev/null 1>/dev/null

[ $yChoix -eq  0 ] && exit 0
[ $yChoix -eq 10 ] && xdg-open "$yPhoto" #2>/dev/null 1>/dev/null
# This syntax works for bash AND dash  ---^        ---^         #

# Loop ?
# exec $0 $@

#
# E N D - Hope you liked it!
#

Boîte de dialogue EXIF

smile En espérant que vous trouverez ça utile.

Dernière modification par UbuntOlivier (Le 10/07/2011, à 17:21)

Hors ligne

#2 Le 07/07/2011, à 14:09

lylambda

Re : [script] Afficher les données EXIF dans une fenêtre yad

Merci pour ce script bien utile smile

Hors ligne

#3 Le 08/07/2011, à 00:19

HP

Re : [script] Afficher les données EXIF dans une fenêtre yad

Pour le fun, un petit essai en pyGTK :
listview.png


cat /dev/urandom >/dev/null 2>&1 #github

Hors ligne

#4 Le 08/07/2011, à 13:56

UbuntOlivier

Re : [script] Afficher les données EXIF dans une fenêtre yad

Merci pour vos réponses.

J'ai ajouté un bouton « Ouvrir » qui lance l'application favorite de visionnage d'image (avec xdg-open).
Mais petit souci, j'ai changé la syntaxe pour les boutons en mettant --button="gtk-open:10" et "gtk-close:0", je récupère bien les boutons standards de l'interface avec l'icône associée, mais le texte reste en anglais, pas moyen de l'avoir en français ou dans tout autre langue. Qqn aurait une idée ?

@HP : le code, on veut le code smile !

Hors ligne

#5 Le 08/07/2011, à 18:44

HP

Re : [script] Afficher les données EXIF dans une fenêtre yad

Un peu plus avancé, du point de vue esthétique, le fenêtre se dimensionne en fonction de son contenu, le titre de la fenêtre correspond au nom du fichier, le nom du fichier (première ligne) est réduit au nom (basename) au lieu du chemin complet :

2011070813101467001680x.th.png

Comme précédemment, les « items » vides ne sont pas affichés.


cat /dev/urandom >/dev/null 2>&1 #github

Hors ligne

#6 Le 08/07/2011, à 18:54

UbuntOlivier

Re : [script] Afficher les données EXIF dans une fenêtre yad

Je remarque que tu as le texte descriptif des différents champs en français, quel logiciel as-tu utilisé pour ça ? Comme exiv2 ne traduit pas, je pourrais p-ê essayer de le faire moi-même dans mon script (une série de sed, je suppose…).

Hors ligne

#7 Le 08/07/2011, à 18:57

HP

Re : [script] Afficher les données EXIF dans une fenêtre yad

UbuntOlivier a écrit :

Comme exiv2 ne traduit pas, je pourrais p-ê essayer de le faire moi-même dans mon script

Je suppose que tu as un souci d'environnement…
Parce que chez moi exiv2 est en Français :

# exiv2 100_2771.JPG
Nom du fichier  : 100_2771.JPG
Taille du fichier: 1751317 Octets
Type MIME       : image/jpeg
Taille de l'image: 2304 x 3072
Marque de l'appareil: EASTMAN KODAK COMPANY
Modèle de l'appareil: KODAK EASYSHARE Z710 ZOOM DIGITAL CAMERA
Horodatage de l'image: 2007:01:03 17:57:34
Numéro de l'image: 
Temps d'exposition: 1/100 s
# env | grep -i lang
LANG=fr_FR.utf8
LANGUAGE=fr_FR.utf8

cat /dev/urandom >/dev/null 2>&1 #github

Hors ligne

#8 Le 09/07/2011, à 00:12

UbuntOlivier

Re : [script] Afficher les données EXIF dans une fenêtre yad

OK HP, merci pour ta remarque qui a attiré mon attention sur un problème que je n'avais pas envisagé (honte sur moi…), une réinstallation de qques paquetages -fr a permis de résoudre pas mal de cas, mais il me reste tjs l'intitulé des boutons gtk en anglais dans yad, et apparemment dans yad seulement (?), j'ai bien des boutons en français dans zenity p.ex.

Comprends pas…

Par contre, dans exiv2 en français, je vois sur ta copie d'écran que du fait de la traduction les champs ne sont plus alignés, il va falloir modifier ces longueurs… sed ? awk ? Je vais plancher là-dessus ce we.

Dernière modification par UbuntOlivier (Le 09/07/2011, à 00:20)

Hors ligne

#9 Le 10/07/2011, à 16:33

UbuntOlivier

Re : [script] Afficher les données EXIF dans une fenêtre yad

Ok, pour avoir les champs alignés :

exiv2 -u laPhoto.jpg | sed s/:/#:/ | column -ts#

Et sans les champs vides :

exiv2 -u laPhoto.jpg | sed s/:/#:/ | column -ts# | grep -ve ".*: $"

Normalement, ça marche quelle que soit la langue…

J'étais parti sur awk, mais printf "%-20s", chaîne ne gère pas correctement la longueur des chaînes quand il s'y trouve des caractères accentués sad

Hors ligne