Téléchargement - programmation d'experts

Fermé
ClR555 - 11 avril 2011 à 22:39
 ClR555 - 12 avril 2011 à 22:38
Bonsoir bonsoir...

Une question me taraude...

-> Est-il envisageable de forcer le téléchargement d'une image avec une watermark, créée au préalable en PHP ?
Si oui , dans quel langage et comment ?

Je vous explique brièvement l'idée : La watermark est créée grace à un fichier .htaccess qui implémente un script de watermark lorsqu'une image d'un dossier, définit en amont, est appelée à être affichée dans un navigateur web.

La watermark n'est pas copiée sur les images originales, elle se montre juste à l'affichage...

Donc cette partie est fonctionnelle.

Voilou. ce que je voudrais, c'est qu'au clic(droit) sur une image (ou sur un fichier...ou sur un lien quel qu'il soit, dans l'idéal) une fenêtre s'ouvre proposant le téléchargement ou l'enregistrement.

Jusque là non plus pas tant de pb. Ce qui m'ennuie c'est qu'en téléchargeant, la watermark ne s'affiche plus puisqu'il n'existe plus d'interface pour l'afficher.

je me disais que peut-être je pouvais réussir à enregistrer l'image au moment du téléchargement (?)...? quitte à voir l'image une seconde à l'écran avant téléchargement, en l'affichant de force et en téléchargeant du coup l'image affichée, et non plus l'image du serveur (ce qu'on peut actuellement faire avec un clic gauche sur l'image affichée).
Mais alors pour ce qui est de mettre en oeuvre, je ne sais absolument pas comment faire.

J'aimerais savoir vous pensez que c'est une mission impossible perdue d'avance pour moi ou si vous croyez qu'il y a peut-être un chemin de traverse à emprunter pour intégrer au final cette watermark dans l'image téléchargée...

je ne trouve pas une once de solution sur le net... mais faut avouer que mes termes de recherche incertains ne m'aident pas non plus je pense.
Tous les conseils sont donc les bienvenus.

Merci d'avance, et très bonne soirée ! : )
A voir également:

7 réponses

avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 504
11 avril 2011 à 23:07
Salut,

Et tu utilises la réécriture d'URL pour passer par le fichier PHP ?
Donc /images/example.png est en réalité /copy.php?file=example.png ?
(par exemple)

Dans ce cas, si l'image est affichée via /images/example.png, il n'y a pas de raison pour qu'en enregistrant, ça ne passe pas via le fichier PHP.

Il faudrait plus de détails pour trouver d'où vient le problème, avec ça, on ne peut rien faire.
1
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 504
12 avril 2011 à 14:58
La réécriture d'URL permet de créer des 'alias'.
On utilise les expressions régulières (regex), et on peut utiliser les parenthèses capturantes pour créer des 'variables'. Et ces variables, on peut les utiliser pour indiquer la cible de l'alias.

Ainsi, si tu veux faire pointer
/images/example.png vers /watermark.php?filename=example.png,
On écrira ceci :
RewriteEngine On
RewriteRule ^images/(.+)$ /watermark.php?filename=$1 [L]
Donc dans watermark.php, on peut utiliser $_GET['filename']

Mais en combinant AddHandler et Action, ça revient au même, sauf que on utilise $_SERVER['PATH_INFO']
1
DoulyCreations Messages postés 187 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 23 mars 2015 19
11 avril 2011 à 22:51
Bonsoir,

En gros tu veut juste intégrer un texte ou une image sur l'image affichée sur le site sans que celle-ci en soit modifiée et que quand on veut l'enregistrer on a pas l'image d'origine mais celle modifiée "virtuellement" ?
0
Bonsoir

oui c'est exactement ça :)
je veux en fait qu'au téléchargement on ait le copyright. Je n'arrive à l'avoir qu'à l'affichage...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonsoir !

Bon alors qq précisions :
à la racine de mon site, j'ai un fichier htaccess qui désigne un fichier (Watermark.php). C'est le fichier qui déclenche à l'affichage de n'importe quelle image du dossier la création d'une seconde image (c'est du texte chez moi) s'affichant sur la première.

addhandler WaterMark jpg gif jpeg 
action WaterMark /Photos/WaterMark.php 

ensuite je fais des liens tous bêtes et mes images s'affichent avec le copyright.

ça répond à tes questions?
0
Avion f16, pourrais-tu développer un peu ta solution STP ?
Merci d'avance
0
Salut,

Je te remercie de ta réponse, qui m'enchante car donc oui, selon toi, pour télécharger une image avec une watermark, il y a une possibilité. :)

Reste la mise en oeuvre, qui n'est pas une mince affaire car je débute...

J'ai essayé de modifier cette partie du coup (ds le fichier watermark.php):
/* 
 DOSSIER COURANT 
  -> pour définir le nom de la watermark 
  -> pour afficher le contenu d'un array : var_dump(pathinfo($_SERVER['SCRIPT_FILENAME'])); 
*/ 

en changeant aussi mes liens de fichier, mais sans succès...

:(

Je me permets de mettre des bouts de code... (dont le fichier complet de watermark) car je n'arrive pas à mettre en place la solution de AvionF16...
Si quelqu'un peut m'aider...

Lien type dans les autres fichiers :

<a href="Photos/mon_image.png"><img src="Photos/miniatures/mon_image.png"/></a> 


Fichier .htaccess (à la racine du site)

addhandler WaterMark jpg gif jpeg 
action WaterMark /Photos/WaterMark.php 


Fichier Watermark.php

<?php 
/* 
    WATERMARK_TYPE 
        Type de watermark          
        Valeurs: 'text' | 'image' 

    WATERMARK_ALIGN_H 
        Alignment horizontal          
        Valeurs: 'left' | 'right' | 'center' 

    WATERMARK_ALIGN_V 
        Alignment vertical         
        Valeurs: 'top' | 'bottom' | 'center' 
         
    WATERMARK_MARGIN 
        Excentrage à partir du bord. 
        Valeurs: (en pixels) 
*/ 

    define('WATERMARK_TYPE', 'text');  
    define('WATERMARK_ALIGN_H', 'right');  
    define('WATERMARK_ALIGN_V', 'bottom');  
    define('WATERMARK_MARGIN', '5');  

/* 
    WATERMARK_IMAGE_FILE 
        Chemin vers le fichier image employé comme watermark 
        Valeur possible (chemin absolu ou relatif). 

    WATERMARK_OPACITY 
        Opacité de l'image. 
        Valeurs: entre 0 et 100 
*/ 

    define('WATERMARK_IMAGE_FILE', './wtmk.png'); 
    define('WATERMARK_OPACITY', '60');  

/* 
 DOSSIER COURANT 
  -> pour définir le nom de la watermark 
  NB : split() découpe une lien_ige en un tableau de mots 
  -> pour afficher le contenu d'un array : var_dump(pathinfo($_SERVER['SCRIPT_FILENAME'])); 
*/ 

 $wtmk_temp = 'Copyright "Mariage de Céline et Abdou" 03/2011, tous droits réservés. '; 
  
/* 
/* 
    WATERMARK_TEXT 
        Texte utilisé pour le copyright. 
             
    WATERMARK_TEXT_FONT 
        La police. 
        Valeurs: de 1 à 5 
     
    WATERMARK_TEXT_SHADOW 
        Police "black shadow". 
        Valeurs: 'yes' | 'no' 

    WATERMARK_TEXT_COLOR 
        La couleur de la police 
        Valeurs en décimal (ex: '255,255,255') ou  hexadécimal (ex: '#ff4567') 
*/ 

    define('WATERMARK_TEXT', $wtmk_temp);  
    define('WATERMARK_TEXT_FONT', '2');  
    define('WATERMARK_TEXT_SHADOW', 'yes');  
    define('WATERMARK_TEXT_COLOR', '#FFFFFF');  

// FIN DE LA CONFIGURATION 

    $original_image_file = $_SERVER['DOCUMENT_ROOT'] . $_SERVER['PATH_INFO']; 
    $original_image_info = getimagesize($original_image_file); 
    if ($original_image_info) { 
        $original_image_width = $original_image_info[0];//largeur 
        $original_image_height = $original_image_info[1];//hauteur 
        $original_image_imagetype = $original_image_info[2];//type de l'image 
        $original_image_mime_type = $original_image_info['mime'];//type mime 
    } 
    else { 
        header("Status: 500 Internal Server Error"); 
        if ($_SERVER['REQUEST_METHOD'] != 'HEAD') { 
            header("Content-Type: text/plain"); 
            echo "WaterMark: Erreur lors de la lecture des propriétés des images de la galerie."; 
                        echo "Une ou plusieurs images sont tronquées par une signature d'entête.\n"; 
        } 
        exit; 
    } 

    if ($original_image_imagetype == IMAGETYPE_GIF) { 
        header("Content-Type: " . $original_image_mime_type); 
        readfile($original_image_file); 
        exit; 
    }  
    elseif ($original_image_imagetype == IMAGETYPE_JPEG) { 
        header("Content-Type: " . $original_image_mime_type); 
        $source_image = imagecreatefromjpeg($original_image_file); 
    }  
    elseif ($original_image_imagetype == IMAGETYPE_PNG) { 
        header("Content-Type: " . $original_image_mime_type); 
        $source_image = imagecreatefrompng($original_image_file); 
    } 
    else { 
        header("Status: 500 Internal Server Error"); 
        if ($_SERVER['REQUEST_METHOD'] != 'HEAD') { 
            header("Content-Type: text/plain"); 
            echo "WaterMark: Format d'image non supporté\n"; 
        } 
        exit; 
    } 

    if (WATERMARK_TYPE == 'image' && WATERMARK_IMAGE_FILE != ''  
    && file_exists(WATERMARK_IMAGE_FILE)) { 

        $watermark_image_file = realpath(WATERMARK_IMAGE_FILE); 

        $watermark_image_info = getimagesize($watermark_image_file); 
        if ($original_image_info) { 
            $watermark_image_width = $watermark_image_info[0]; 
            $watermark_image_height = $watermark_image_info[1]; 
            $watermark_image_imagetype = $watermark_image_info[2]; 
            $watermark_image_mime_type = $watermark_image_info['mime']; 
        } 
        else { 
            header("Status: 500 Internal Server Error"); 
            if ($_SERVER['REQUEST_METHOD'] != 'HEAD') { 
                header("Content-Type: text/plain"); 
                echo "WaterMark: Erreur lors de a lecture des propriétés de l'image à incruster."; 
                                echo "L'image est tronquée par une signature d'entête.\n"; 
            } 
            exit; 
        } 

        if ($watermark_image_imagetype == IMAGETYPE_JPEG) { 
            $watermark_image = imagecreatefromjpeg(WATERMARK_IMAGE_FILE); 
        }  
        elseif ($watermark_image_imagetype == IMAGETYPE_PNG) { 
            $watermark_image = imagecreatefrompng(WATERMARK_IMAGE_FILE); 
        } 

        if ($watermark_image) { 

            $watermark_y = WATERMARK_MARGIN; 
            if (WATERMARK_ALIGN_V == 'top') { 
                $watermark_y = WATERMARK_MARGIN; 
            }  
            elseif (WATERMARK_ALIGN_V == 'bottom') { 
                $watermark_y = $original_image_height - $watermark_image_height - WATERMARK_MARGIN; 
            }  
            elseif (WATERMARK_ALIGN_V == 'center') { 
                $watermark_y = (int)($original_image_height / 2 - $watermark_image_height / 2); 
            } 

            $watermark_x = WATERMARK_MARGIN;         
            if (WATERMARK_ALIGN_H == 'left') { 
                $watermark_x = WATERMARK_MARGIN; 
            }  
            elseif (WATERMARK_ALIGN_H == 'right') { 
                $watermark_x = $original_image_width - $watermark_image_width - WATERMARK_MARGIN; 
            }  
            elseif (WATERMARK_ALIGN_H == 'center') { 
                $watermark_x = (int)($original_image_width / 2 - $watermark_image_width / 2); 
            } 

            imagecopymerge( 
                $source_image,  
                $watermark_image,  
                $watermark_x, $watermark_y, 
                0, 0,  
                $watermark_image_width, $watermark_image_height, 
                WATERMARK_OPACITY 
            );     
        } 
    } 
    elseif (WATERMARK_TYPE == 'text' && WATERMARK_TEXT != '') { 

        $color = WATERMARK_TEXT_COLOR; 
        $red = hexdec(substr($color, 1, 2)); 
        $green = hexdec(substr($color, 3, 2)); 
        $blue = hexdec(substr($color, 5, 2));         
        $text_color = imagecolorallocate($source_image, $red, $green, $blue);  
        $shadow_color = imagecolorallocate($source_image, 0, 0, 0);  
        $text_height = imagefontheight(WATERMARK_TEXT_FONT); 
        $text_width = strlen(WATERMARK_TEXT) * imagefontwidth(WATERMARK_TEXT_FONT); 

        $watermark_y = WATERMARK_MARGIN; 
        if (WATERMARK_ALIGN_V == 'top') { 
            $watermark_y = WATERMARK_MARGIN; 
        } 
        elseif (WATERMARK_ALIGN_V == 'bottom') { 
            $watermark_y = $original_image_height - $text_height - WATERMARK_MARGIN; 
        } 
        elseif (WATERMARK_ALIGN_V == 'center') { 
            $watermark_y = (int)($original_image_height / 2 - $text_height / 2); 
          } 

        $watermark_x = WATERMARK_MARGIN; 
        if (WATERMARK_ALIGN_H == 'left') { 
            $watermark_x = WATERMARK_MARGIN; 
        } 
        elseif (WATERMARK_ALIGN_H == 'right') { 
            $watermark_x = $original_image_width - $text_width - WATERMARK_MARGIN; 
        } 
        elseif (WATERMARK_ALIGN_H == 'center') { 
            $watermark_x = (int)($original_image_width / 2 - $text_width / 2); 
        } 

        if (WATERMARK_TEXT_SHADOW == 'yes') { 
            imagestring( 
                $source_image,  
                WATERMARK_TEXT_FONT,  
                $watermark_x + 1, $watermark_y + 1,  
                WATERMARK_TEXT,  
                $shadow_color 
            ); 
        } 
        imagestring( 
            $source_image,  
            WATERMARK_TEXT_FONT,  
            $watermark_x, $watermark_y, 
            WATERMARK_TEXT, 
            $text_color 
        ); 

    } 
    else { 
        header("Status: 500 Internal Server Error"); 
        if ($_SERVER['REQUEST_METHOD'] != 'HEAD') { 
            header("Content-Type: text/plain");                 
            echo "WaterMark: Erreur de configuration\n"; 
        } 
        exit; 
    } 

    if ($original_image_imagetype == IMAGETYPE_JPEG) { 
        imagejpeg($source_image,null,100); 
    } 
    elseif ($original_image_format == IMAGETYPE_PNG) { 
        imagepng($source_image,null,100); 
    }   
?> 
0
Je n'y arrive toujours pas...et la fameuse erreur500...
je me up du coup...

merci d'avance de votre aide
0