Retour au Portfolio
Watermark - Application de Filigrane d'Images
Application Python - Tkinter & PIL
Projet Actif

Watermark — Application de Filigrane d'Images

Application Python moderne développée avec Tkinter et PIL pour ajouter des filigranes textuels sur les images. Interface intuitive avec prévisualisation en temps réel, redimensionnement automatique et sauvegarde multi-formats.

Vue d'ensemble du projet

Watermark est une application Python complète développée avec Tkinteret PIL (Pillow) pour ajouter des filigranes textuels sur les images. L'application propose une interface moderne et intuitive permettant de charger des images, d'ajouter des filigranes personnalisés et de sauvegarder le résultat dans différents formats.

Le projet intègre un système de prévisualisation en temps réel avec redimensionnement automatique, un algorithme de filigrane en mosaïque qui répète le texte sur toute l'image, et une gestion intelligente des formats d'image (PNG, JPEG, BMP) avec support de la transparence.

L'interface utilisateur moderne utilise des styles TTK personnalisés, des couleurs harmonieuses et une expérience utilisateur fluide. Le système de filigrane applique une transparence modérée pour préserver la lisibilité de l'image originale tout en ajoutant une protection visuelle efficace.

Fonctionnalités clés

🖼️ Chargement d'images depuis l'ordinateur (PNG, JPEG, BMP)
👁️ Prévisualisation en temps réel avec redimensionnement automatique
📝 Ajout de filigranes textuels personnalisés
🔁 Application en mosaïque avec transparence modérée
💾 Sauvegarde dans différents formats (PNG, JPEG)
🎨 Interface moderne avec styles TTK personnalisés
📏 Redimensionnement intelligent pour l'affichage
🔍 Gestion des calques transparents et qualité optimale

Implémentation du code

1. Import des bibliothèques

import tkinter as tk
from tkinter import filedialog, messagebox
from tkinter import ttk
from PIL import Image, ImageTk, ImageDraw, ImageFont

2. Structure de la classe principale

class ApplicationFiligrane:
    """Classe principale de l'application de filigrane d'images."""
    
    def __init__(self, fenetre_principale):
        self.fenetre = fenetre_principale
        self._configurer_fenetre()
        self._creer_styles()
        self._creer_interface()
        self._initialiser_variables()
    
    def _configurer_fenetre(self):
        """Configure les paramètres de base de la fenêtre."""
        self.fenetre.title("Application de Filigrane d'Images")
        self.fenetre.geometry("800x600")
        self.fenetre.configure(bg="#f0f0f0")

3. Chargement et affichage d'images

def charger_image(self):
    """Ouvre une boîte de dialogue pour sélectionner une image."""
    chemin_fichier = filedialog.askopenfilename(
        title="Sélectionner une image",
        filetypes=[
            ("Images", "*.png;*.jpg;*.jpeg;*.bmp"), 
            ("Tous les fichiers", "*.*")
        ]
    )
    
    if chemin_fichier:
        try:
            # Ouvrir et convertir l'image en RGBA pour supporter la transparence
            self.image_originale = Image.open(chemin_fichier).convert("RGBA")
            self.afficher_image(self.image_originale)
            messagebox.showinfo("Succès", "Image chargée avec succès!")
        except Exception as erreur:
            messagebox.showerror("Erreur", f"Impossible d'ouvrir l'image.\n{erreur}")

4. Algorithme de filigrane en mosaïque

def _dessiner_filigrane_mosaique(self, dessinateur, texte, police, 
                               largeur_texte, hauteur_texte, espacement, taille_image):
    """Dessine le filigrane en mosaïque sur toute l'image."""
    largeur_image, hauteur_image = taille_image
    
    # Parcourir l'image et dessiner le filigrane répétitivement
    for y in range(0, hauteur_image, hauteur_texte + espacement):
        for x in range(0, largeur_image, largeur_texte + espacement):
            # Dessiner le texte en gris clair avec transparence modérée
            dessinateur.text(
                (x, y), 
                texte, 
                fill=(80, 80, 80, 100),  # Gris clair avec transparence
                font=police
            )

5. Sauvegarde multi-formats

def sauvegarder_image(self):
    """Sauvegarde l'image avec filigrane dans un fichier."""
    chemin_fichier = filedialog.asksaveasfilename(
        title="Sauvegarder l'image",
        defaultextension=".png",
        filetypes=[
            ("Image PNG", "*.png"), 
            ("Image JPEG", "*.jpg;*.jpeg")
        ]
    )
    
    if chemin_fichier:
        try:
            # Si sauvegarde en JPEG, convertir de RGBA vers RGB 
            if chemin_fichier.lower().endswith((".jpg", ".jpeg")):
                image_rgb = self.image_filigrane.convert("RGB")
                image_rgb.save(chemin_fichier)
            else:
                self.image_filigrane.save(chemin_fichier)
            
            messagebox.showinfo("Succès", "Image avec filigrane sauvegardée!")
        except Exception as erreur:
            messagebox.showerror("Erreur", f"Impossible de sauvegarder.\n{erreur}")

Technologies utilisées

Python
Tkinter
PIL
Pillow
TTK
ImageTk
ImageDraw
ImageFont

Détails du projet

Client

Projet Personnel

Timeline

2025 – Présent

Rôle

Développeur Python

Fonctionnalités de l'application

Interface: Design moderne avec Tkinter et TTK
Formats: PNG, JPEG, BMP avec support transparence
Filigrane: Texte personnalisé en mosaïque
Prévisualisation: Temps réel avec redimensionnement
Sauvegarde: Multi-formats avec conversion automatique
Qualité: Préservation de la qualité originale
Transparence: Gestion des calques RGBA

Métriques de performance

Traitement

Temps réel

Formats supportés

PNG, JPEG, BMP

Interface

800x600px responsive

Qualité

Préservation optimale

© 2026 Sina Ganji. Tous droits réservés.

0%