Traitement et protection automatique des photos

Comment ajouter automatiquement un copyright ou droit d'auteur à une série de photos ?

29 novembre 2014

Rappels

métadonnées ou exif sont des données supplémentaires incorporées dans les photos, par exemple la date et l'heure ou la position gps.

filigrane ou watermark est une information ajoutée dans l'image difficilement falsifiable.

Exemple d'utilisation

Nous avons appliqué cette méthode aux photos arrière-plans de notre projet lyon.glicer.com afin d'effectuer les traitements suivants :

Pré-requis

Les outils libres ci-dessous doivent être installés :

Une fois installés :

Structure des répertoires

Nos fichiers sont organisés comme ci-dessous :

│   filigrane_invisible.txt
│   filigrane_visible.png
│   metadonnee.txt

├───build
└───src
        photo1.jpg
        photo2.jpg
        photo3.jpg

Commandes

Transformation des images à l'aide d'ImageMagick

mogrify -verbose -path build -type Grayscale -blur 0x5 -quality 85% src/*.jpg

En l'exécutant en ligne de commande, cela affiche :

src\photo1.jpg JPEG 2048x1536 2048x1536+0+0 8-bit sRGB 1.592MB 0.047u 0:00.047
src\photo1.jpg=>build\photo1.jpg JPEG 2048x1536 2048x1536+0+0 8-bit Grayscale Gray 155KB 1.063u 0:01.062
src\photo2.jpg JPEG 2048x1536 2048x1536+0+0 8-bit sRGB 1.558MB 0.047u 0:00.046
src\photo2.jpg=>build\photo2.jpg JPEG 2048x1536 2048x1536+0+0 8-bit Grayscale Gray 175KB 1.125u 0:01.141
src\photo3.jpg JPEG 2048x1536 2048x1536+0+0 8-bit sRGB 1.509MB 0.063u 0:00.062
src\photo3.jpg=>build\photo3.jpg JPEG 2048x1536 2048x1536+0+0 8-bit Grayscale Gray 150KB 1.172u 0:01.234

Insertion d'un filigrane visible à l'aide d'ImageMagick

mogrify -verbose -gravity southeast -draw "image Over 10,10 97,16 'filigrane_visible.png'" build/*.jpg

En l'exécutant en ligne de commande, cela affiche :

build\photo1.jpg JPEG 2048x1536 2048x1536+0+0 8-bit Gray 256c 155KB 0.109u 0:00.109
build\photo1.jpg JPEG 2048x1536 2048x1536+0+0 8-bit Gray 157KB 0.141u 0:00.187
build\photo2.jpg JPEG 2048x1536 2048x1536+0+0 8-bit Gray 256c 175KB 0.109u 0:00.125
build\photo2.jpg JPEG 2048x1536 2048x1536+0+0 8-bit Gray 176KB 0.141u 0:00.156
build\photo3.jpg JPEG 2048x1536 2048x1536+0+0 8-bit Gray 256c 150KB 0.109u 0:00.109
build\photo3.jpg JPEG 2048x1536 2048x1536+0+0 8-bit Gray 151KB 0.125u 0:00.156

Pour vérifier la présence du filigrane visible, afficher une des images du répertoire build.

Insertion d'un filigrane invisible à l'aide de Steghide

Steghide ne permet pas de traiter un répertoire entier, il est donc nécessaire de créer un fichier de commande qui contient, par exemple sous windows, le code ci-dessous :

@echo off
FOR %%i IN (build/\*.jpg) DO (
    steghide embed -cf %%i -ef filigrane_invisible.txt -p mot_de_passe
)

Notre fichier filigrane contient le texte ci-dessous :

Cette image est la propriété exclusive de GLICER. Merci de ne pas l'utiliser sans autorisation.
© GLICER

En exécutant le fichier de commande, cela affiche :

embedding "filigrane_invisible.txt" in "build/\photo1.jpg"... done
embedding "filigrane_invisible.txt" in "build/\photo2.jpg"... done
embedding "filigrane_invisible.txt" in "build/\photo3.jpg"... done

Vérification du filigrane invisible à l'aide de Steghide

Pour vérifier l'authenticité de l'image, exécuter la commande ci-dessous :

steghide extract -sf build/photo1.jpg -xf verifie_filigrane_invisible.txt -p mot_de_passe

Cela affiche :

wrote extracted data to "verifie_filigrane_invisible.txt".

Le contenu du fichier verifie_filigrane_invisible.txt doit être identique à celui du fichier filigrane_invisible.txt

Personnalisation des métadonnées à l'aide d'ExifTool

Steghide supprime automatiquement toutes les métadonnées, nous devons personnaliser les métadonnées après l'exécution de steghide

exiftool -overwrite_original -all= -@ metadonnee.txt build

Notre fichier metadonnee.txt contient :

-ImageDescription=Lyon par temps nuageux
-Copyright=GLICER
-XPTitle=Lyon par temps nuageux
-XPComment=Lyon par temps nuageux
-XPAuthor=E.ROECKER & R.BOUCHAGOUR
-XPKeywords=Lyon
-Keywords=Lyon
-By-line=E.ROECKER & R.BOUCHAGOUR
-City=Lyon
-Credit=www.glicer.com
-CopyrightNotice=GLICER
-GPSLatitude=45.75
-GPSLongitude=4.85

En l'exécutant en ligne de commande, cela affiche :

1 directories scanned
3 image files updated

Vérification des métadonnées à l'aide d'ExifTool

Pour vérifier les nouvelles données exif de l'image, exécuter la commande ci-dessous :

exiftool -H build/photo1.jpg

Cela affiche :

     - ExifTool Version Number         : 9.77
     - File Name                       : photo1.jpg
     - Directory                       : build
     - File Size                       : 112 kB
     - File Modification Date/Time     : 2014:11:30 02:45:22+01:00
     - File Access Date/Time           : 2014:11:30 02:45:22+01:00
     - File Creation Date/Time         : 2014:11:30 02:45:22+01:00
     - File Permissions                : rw-rw-rw-
     - File Type                       : JPEG
     - MIME Type                       : image/jpeg
     - Exif Byte Order                 : Big-endian (Motorola, MM)
0x010e Image Description               : Lyon par temps nuageux
0x011a X Resolution                    : 72
0x011b Y Resolution                    : 72
0x0128 Resolution Unit                 : inches
0x0213 Y Cb Cr Positioning             : Centered
0x8298 Copyright                       : GLICER
0x0000 GPS Version ID                  : 2.3.0.0
0x0002 GPS Latitude                    : 45 deg 45' 0.00"
0x0004 GPS Longitude                   : 4 deg 50' 60.00"
0x9c9b XP Title                        : Lyon par temps nuageux
0x9c9c XP Comment                      : Lyon par temps nuageux
0x9c9d XP Author                       : E.ROECKER & R.BOUCHAGOUR
0x9c9e XP Keywords                     : Lyon
     - Current IPTC Digest             : a339b476206b694c0c11af54569d6478
0x0019 Keywords                        : Lyon
0x0050 By-line                         : E.ROECKER & R.BOUCHAGOUR
0x005a City                            : Lyon
0x006e Credit                          : www.glicer.com
0x0074 Copyright Notice                : GLICER
0x0000 Application Record Version      : 4
     - Image Width                     : 2048
     - Image Height                    : 1536
     - Encoding Process                : Baseline DCT, Huffman coding
     - Bits Per Sample                 : 8
     - Color Components                : 1
     - Image Size                      : 2048x1536
     - GPS Position                    : 45 deg 45' 0.00", 4 deg 50' 60.00"

Exécuter tout le cycle

Le fichier de commande permettant d'exécuter automatiquement toutes les tâches contient, par exemple sous windows, le code ci-dessous :

@echo off
mogrify -verbose -path build -type Grayscale -blur 0x5 -quality 85%% src/*.jpg
mogrify -verbose -gravity southeast -draw "image Over 10,10 97,16 'filigrane_visible.png'" build/*.jpg
FOR %%i IN (build/\*.jpg) DO (
    steghide embed -cf %%i -ef filigrane_invisible.txt -p mot_de_passe
)
exiftool -overwrite_original -all= -@ metadonnee.txt build

En exécutant le fichier de commande, cela affiche :

src\photo1.jpg JPEG 2048x1536 2048x1536+0+0 8-bit sRGB 1.592MB 0.063u 0:00.062
src\photo1.jpg=>build\photo1.jpg JPEG 2048x1536 2048x1536+0+0 8-bit Grayscale Gray 155KB 1.094u 0:01.125
src\photo2.jpg JPEG 2048x1536 2048x1536+0+0 8-bit sRGB 1.558MB 0.047u 0:00.047
src\photo2.jpg=>build\photo2.jpg JPEG 2048x1536 2048x1536+0+0 8-bit Grayscale Gray 175KB 1.109u 0:01.125
src\photo3.jpg JPEG 2048x1536 2048x1536+0+0 8-bit sRGB 1.509MB 0.047u 0:00.046
src\photo3.jpg=>build\photo3.jpg JPEG 2048x1536 2048x1536+0+0 8-bit Grayscale Gray 150KB 1.125u 0:01.141
build\photo1.jpg JPEG 2048x1536 2048x1536+0+0 8-bit Gray 256c 155KB 0.047u 0:00.045
build\photo1.jpg JPEG 2048x1536 2048x1536+0+0 8-bit Gray 157KB 0.063u 0:00.063
build\photo2.jpg JPEG 2048x1536 2048x1536+0+0 8-bit Gray 256c 175KB 0.047u 0:00.046
build\photo2.jpg JPEG 2048x1536 2048x1536+0+0 8-bit Gray 177KB 0.063u 0:00.062
build\photo3.jpg JPEG 2048x1536 2048x1536+0+0 8-bit Gray 256c 150KB 0.047u 0:00.046
build\photo3.jpg JPEG 2048x1536 2048x1536+0+0 8-bit Gray 151KB 0.063u 0:00.063
embedding "filigrane_invisible.txt" in "build/\photo1.jpg"... done
embedding "filigrane_invisible.txt" in "build/\photo2.jpg"... done
embedding "filigrane_invisible.txt" in "build/\photo3.jpg"... done
    1 directories scanned
    3 image files updated

Analyse des résultats

NomTaille originaleTaille finaleGain
photo1.jpg1,51 Mo111 Ko93 %
photo2.jpg1,48 Mo128 Ko91 %
photo3.jpg1,43 Mo106 Ko92 %

Arborescence finale

│   cycle.bat
│   filigrane_invisible.txt
│   filigrane_visible.png
│   metadonnee.txt
│   verifie_filigrane_invisible.txt

├───build
│       photo1.jpg
│       photo2.jpg
│       photo3.jpg

└───src
        photo1.jpg
        photo2.jpg
        photo3.jpg

Versions des logiciels et langages utilisés