Téléchargement - programmation d'experts

ClR555 -  
 ClR555 -
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 ! : )

7 réponses

  1. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    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
  2. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    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
  3. DoulyCreations Messages postés 265 Statut Membre 19
     
    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
  4. ClR555
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ClR555
     
    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
  7. ClR555
     
    Avion f16, pourrais-tu développer un peu ta solution STP ?
    Merci d'avance
    0
  8. ClR555
     
    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
    1. ClR555
       
      Je n'y arrive toujours pas...et la fameuse erreur500...
      je me up du coup...

      merci d'avance de votre aide
      0