• # Le script

    Posté par (site web personnel) . En réponse à la dépêche Éblouissants Reflets, une exposition impressionniste à Rouen. Évalué à 10.

    Comme promis, voici le script. Il est spécifique pour cette exposition-là, mais elle utilise le système Deep Zoom de Microsoft, donc ce script est peut-être adaptable pour d'autres expositions semblables. Il utile wget, curl, xml2 et ImageMagick.

    #! /bin/sh
    set -e
    if [ $# -ne 2 ]
    then
    echo "Usage: 0ドル TITLE ID" >&2
     exit 1
    fi
    title="1ドル"
    id="2ドル"
    mkdir "$title"
    cd "$title"
    printf 'Getting image metadata\n'
    wget -q "http://eblouissantsreflets.fr/sites/default/files/deepzoom/${id}.dzi"
    # Get image parameters from the metadata file
    tilesize="$(xml2 < "$id.dzi" | grep -F TileSize | cut -d= -f2)"
    overlap="$(xml2 < "$id.dzi" | grep -F Overlap | cut -d= -f2)"
    width="$(xml2 < "$id.dzi" | grep -F Width | cut -d= -f2)"
    height="$(xml2 < "$id.dzi" | grep -F Height | cut -d= -f2)"
    nx="$((($width-1)/$tilesize + 1))"
    ny="$((($height-1)/$tilesize + 1))"
    printf 'Determining maximum zoom level\n'
    mkdir tmp
    cd tmp
    # Try to download the first frame of each zoom level from 8 to 15
    curl -s "http://eblouissantsreflets.fr/sites/default/files/deepzoom/${id}_files/[8-15]/0_0.jpg" -o "#1"
    zoom=0
    # Check which file were actually downloaded: the last one matches the maximum zoom level
    for file in *
    do
     if [ $file -gt $zoom ]
     then
    zoom=$file
     fi
    done
    printf 'Found maximum zoom level: %d\n' "$zoom"
    cd - >/dev/null
    rm -rf tmp
    printf 'Getting tiles\n'
    mkdir -p tiles/orig
    cd tiles/orig
    # Download all the tiles at the maximum zoom level
    curl -s "http://eblouissantsreflets.fr/sites/default/files/deepzoom/${id}_files/$zoom/[0-$(($nx - 1))]_[0-$(($ny - 1))].jpg" -o "#1_#2.jpg"
    cd - >/dev/null
    printf 'Ordering tiles\n'
    mkdir -p tiles/mine
    # Rename the tiles so they are in the correct order for assembling
    cd tiles/mine
    for i in $(seq 0 $(($nx - 1)))
    do
     for j in $(seq 0 $(($ny - 1)))
     do
    ln "../orig/${i}_${j}.jpg" "$(printf '%02d-%02d.jpg' "$j" "$i")"
     done
    done
    cd - >/dev/null
    printf 'Assembling tiles\n'
    montage -geometry "-${overlap}-${overlap}" -tile "${nx}x${ny}" tiles/mine/*.jpg "$title.jpg"
    
    

    Il prend en argument le titre de l'œuvre — pour nommer le fichier — et son identifiant, qui est une espèce de hachage qui peut être récupéré dans le code source de page Web correspondante. Par exemple, pour le premier tableau, Champ de tulipes en Hollande — cherchez la chaîne « deepzoom » dans la code source de la page — de Claude Monet :

    $ ./rip "Claude Monet - Champ de tulipes en Hollande" 3236ada461be8b4a5384418596c92a80