•  » Plugins
  •  » Modification d'une image avant affichage

#1 2011-12-06 18:40:06

tosca
Former Piwigo Team
Cévennes (Gard)
2006-09-23
3818

Modification d'une image avant affichage

Je cherche à adapter pour Piwigo/Smarty un script de modification d'une image à la volée (ajout d'un watermark), mais je ne sais pas comment m'y prendre ...
Le code est le suivant :

Code:

<?php

function my_function()
{
header('content-type: image/jpeg');
$watermark = imagecreatefrompng('local/css/img/watermark.png');
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
$image = imagecreatetruecolor($watermark_width, $watermark_height);
$image = imagecreatefromjpeg($_GET['src']);
$size = getimagesize($_GET['src']);
$dest_x = $size[0] - $watermark_width - 5;
$dest_y = $size[1] - $watermark_height - 5;
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);}



if (defined('IN_ADMIN'))        // non applicable à l'interface d'administration
    return;
    add_event_handler('loc_end_picture', 'my_function');
?>

mais la récupération de l'URL de l'image par $_GET['src'] ne fonctionne évidemment pas dans notre contexte. Puis-je avoir quelques pistes pour transposer ça ?

Merci d'avance.

Hors ligne

#2 2011-12-07 00:34:26

ddtddt
Équipe Piwigo
Quetigny (21) - France
2007-07-27
16979

Re: Modification d'une image avant affichage

un truc du genre

global $template
    $scr = $template->get_template_vars('SRC_IMG');

pour obtenir URL de l'image
   

Mais pour un plugin, je ferais également un pré filtre sur URL de l'image pour être sur que personne d'autre ne passe après toi


Vous aimez Piwigo alors n'hésitez pas à participer avec nous, plus d'infos sur la page "Contribuer à Piwigo". Si vous n'avez pas beaucoup de temps et que vous souhaitez nous soutenir vous pouvez aussi le faire par un don.

Hors ligne

#3 2011-12-07 07:38:08

tosca
Former Piwigo Team
Cévennes (Gard)
2006-09-23
3818

Re: Modification d'une image avant affichage

ddtddt a écrit:

global $template
    $scr = $template->get_template_vars('SRC_IMG');

pour obtenir URL de l'image

La première étape est franchie : on récupère bien l'image, et elle est traitée comme prévue.

Par contre, elle est affichée tout seule, telle quelle, dans la fenêtre du navigateur : toute la page html a disparu.
Comme si l'output se faisait directement vers le navigateur, et pas vers le template.
   

ddtddt a écrit:

Mais pour un plugin, je ferais également un pré filtre sur URL de l'image pour être sur que personne d'autre ne passe après toi

Pas compris ... peux-tu expliquer un peu ?
"personne d'autre" concerne un visiteur malintentionné, ou le développeur d'un autre plugin ou traitement ?

Hors ligne

#4 2011-12-07 10:46:45

ddtddt
Équipe Piwigo
Quetigny (21) - France
2007-07-27
16979

Re: Modification d'une image avant affichage

tosca a écrit:

ddtddt a écrit:

global $template
    $scr = $template->get_template_vars('SRC_IMG');

pour obtenir URL de l'image

La première étape est franchie : on récupère bien l'image, et elle est traitée comme prévue.

Par contre, elle est affichée tout seule, telle quelle, dans la fenêtre du navigateur : toute la page html a disparu.
Comme si l'output se faisait directement vers le navigateur, et pas vers le template.

Avec cela tu récupère URL de l'image à toi de retraiter l'image et de réaffecté un nouvelle URL au template

C'était juste une réponse rapide pour te donner la direction pour 'intercepter' les données du template


Vous aimez Piwigo alors n'hésitez pas à participer avec nous, plus d'infos sur la page "Contribuer à Piwigo". Si vous n'avez pas beaucoup de temps et que vous souhaitez nous soutenir vous pouvez aussi le faire par un don.

Hors ligne

#5 2011-12-07 10:50:26

ddtddt
Équipe Piwigo
Quetigny (21) - France
2007-07-27
16979

Re: Modification d'une image avant affichage

tosca a écrit:

ddtddt a écrit:

Mais pour un plugin, je ferais également un pré filtre sur URL de l'image pour être sur que personne d'autre ne passe après toi

Pas compris ... peux-tu expliquer un peu ?
"personne d'autre" concerne un visiteur malintentionné, ou le développeur d'un autre plugin ou traitement ?

C'est pour éviter les effets de bord des autres plugins et themes

Si tu intercepte en préfiltre le code de URL de l'image affiché dans le navigateur pour imposer ton nouveau code tu as peux chance qu'un autre action sur le code de URL viennent perturber le fonctionnement que tu mets en place (genre peux être un cache des nouvelles photo taille web pour ne pas obliger le serveur à les régénérer à chaque visite)

Est ce que je suis un peux plus claire ?


Vous aimez Piwigo alors n'hésitez pas à participer avec nous, plus d'infos sur la page "Contribuer à Piwigo". Si vous n'avez pas beaucoup de temps et que vous souhaitez nous soutenir vous pouvez aussi le faire par un don.

Hors ligne

#6 2011-12-07 11:35:46

tosca
Former Piwigo Team
Cévennes (Gard)
2006-09-23
3818

Re: Modification d'une image avant affichage

ddtddt a écrit:

tosca a écrit:

... toute la page html a disparu.
Comme si l'output se faisait directement vers le navigateur, et pas vers le template.

Avec cela tu récupère URL de l'image à toi de retraiter l'image et de réaffecté un nouvelle URL au template

Je ne suis pas sûre d'avoir compris ... l'image doit être modifiée à la volée avant affichage dans la page html, donc il ne devrait pas y avoir de changement d'URL :
1) on récupère l'image source -> ça marche, grâce à ce que tu m'as donné
2) on modifie l'image -> ça marche avec le script que j'ai déniché sur le web
3) on met l'image modifiée dans le template -> c'est ce qui reste à faire

ddtddt a écrit:

C'est pour éviter les effets de bord des autres plugins et themes

Si tu intercepte en préfiltre le code de URL de l'image affiché dans le navigateur pour imposer ton nouveau code tu as peux chance qu'un autre action sur le code de URL viennent perturber le fonctionnement que tu mets en place (genre peux être un cache des nouvelles photo taille web pour ne pas obliger le serveur à les régénérer à chaque visite)

Est ce que je suis un peux plus claire ?

Oui, je saisis mieux, mais :
- je voudrais d'abord obtenir un résultat conforme à ce que j'attends, avant de me pencher sur ce genre d'amélioration (sauf à ce que la mise en place du préfiltre soit absolument nécessaire)
- le thème est perso, et je limite les plugins externes au strict nécessaire => en principe, je devrais pouvoir gérer les interférences

Pour faire bref, si c'est plus compliqué pour un besoin que je n'ai pas (ou pas encore identifié, en tout cas), je préfère m'en passer, au moins dans un premier temps. ;-)

Hors ligne

#7 2011-12-07 12:58:06

ddtddt
Équipe Piwigo
Quetigny (21) - France
2007-07-27
16979

Re: Modification d'une image avant affichage

tosca a écrit:

ddtddt a écrit:

tosca a écrit:

... toute la page html a disparu.
Comme si l'output se faisait directement vers le navigateur, et pas vers le template.

Avec cela tu récupère URL de l'image à toi de retraiter l'image et de réaffecté un nouvelle URL au template

Je ne suis pas sûre d'avoir compris ... l'image doit être modifiée à la volée avant affichage dans la page html, donc il ne devrait pas y avoir de changement d'URL :
1) on récupère l'image source -> ça marche, grâce à ce que tu m'as donné
2) on modifie l'image -> ça marche avec le script que j'ai déniché sur le web
3) on met l'image modifiée dans le template -> c'est ce qui reste à faire

Tu affectes le nouveau chemin à SRC_IMG

avec un truc du genre

$newphoto='url de ton image modifié';

global $template;
$template->assign('SRC_IMG', $newphoto);


Vous aimez Piwigo alors n'hésitez pas à participer avec nous, plus d'infos sur la page "Contribuer à Piwigo". Si vous n'avez pas beaucoup de temps et que vous souhaitez nous soutenir vous pouvez aussi le faire par un don.

Hors ligne

#8 2011-12-07 22:59:30

tosca
Former Piwigo Team
Cévennes (Gard)
2006-09-23
3818

Re: Modification d'une image avant affichage

ddtddt a écrit:

tosca a écrit:

...
3) on met l'image modifiée dans le template -> c'est ce qui reste à faire

Tu affectes le nouveau chemin à SRC_IMG

avec un truc du genre

$newphoto='url de ton image modifié';

global $template;
$template->assign('SRC_IMG', $newphoto);

Pas mieux : c'est toujours l'image modifiée qui s'affiche seule dans le navigateur.

Je me demande si ce n'est pas

Code:

header('content-type: image/jpeg');

qui provoque l'affichage immédiat de l'image modifiée, en court-circuitant tout le reste ; mais si je le retire, ma page est remplacée par des caractères cabalistiques (affichage du JPEG comme si c'était du texte ?) qui n'ont plus rien à voir ni avec la photo, ni avec Piwigo.

Hors ligne

#9 2011-12-07 23:50:30

ddtddt
Équipe Piwigo
Quetigny (21) - France
2007-07-27
16979

Re: Modification d'une image avant affichage

si tu arrête la fonction break cela ne retourne pas à Piwigo ?


Vous aimez Piwigo alors n'hésitez pas à participer avec nous, plus d'infos sur la page "Contribuer à Piwigo". Si vous n'avez pas beaucoup de temps et que vous souhaitez nous soutenir vous pouvez aussi le faire par un don.

Hors ligne

#10 2011-12-08 00:03:22

tosca
Former Piwigo Team
Cévennes (Gard)
2006-09-23
3818

Re: Modification d'une image avant affichage

ddtddt a écrit:

si tu arrête la fonction break cela ne retourne pas à Piwigo ?

"arrêter la fonction break" ? Je ne comprends pas ce que tu veux dire.

Hors ligne

#11 2011-12-08 00:15:24

ddtddt
Équipe Piwigo
Quetigny (21) - France
2007-07-27
16979

Re: Modification d'une image avant affichage

avant l'accolade de la fin de ta fonction tu met break pour arrêter ta fonction et retourner à Piwigo

Mais je ne pense que header('content-type: image/jpeg'); ne sert à rien pour ton besoins
je dirais bien qu'il faut rajouter un lignes pour copier l'image générer quelque part


Vous aimez Piwigo alors n'hésitez pas à participer avec nous, plus d'infos sur la page "Contribuer à Piwigo". Si vous n'avez pas beaucoup de temps et que vous souhaitez nous soutenir vous pouvez aussi le faire par un don.

Hors ligne

#12 2011-12-08 00:17:57

ddtddt
Équipe Piwigo
Quetigny (21) - France
2007-07-27
16979

Re: Modification d'une image avant affichage

et lui donner un nom pour pouvoir l'utiliser dans Piwigo


Vous aimez Piwigo alors n'hésitez pas à participer avec nous, plus d'infos sur la page "Contribuer à Piwigo". Si vous n'avez pas beaucoup de temps et que vous souhaitez nous soutenir vous pouvez aussi le faire par un don.

Hors ligne

#13 2011-12-08 23:33:10

tosca
Former Piwigo Team
Cévennes (Gard)
2006-09-23
3818

Re: Modification d'une image avant affichage

Ca progresse, mais il y a encore quelque chose qui cloche ... D'après ce que j'ai trouvé sur cette page, il faut effectivement passer par une sauvegarde sur disque.

Mon code est maintenant le suivant :

Code:

function my_watermark()
{
    global $template;

$watermark = imagecreatefrompng('local/css/img/watermark.png');
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
$image = imagecreatetruecolor($watermark_width, $watermark_height);
$scr = $template->get_template_vars('SRC_IMG');
$image = imagecreatefromjpeg($scr);
$size = getimagesize($scr);
$dest_x = $size[0] - $watermark_width - 5;
$dest_y = $size[1] - $watermark_height - 5;
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);
imagejpeg($image, 'local/css/img/image.jpg', 100);
$template->assign('SRC_IMG', 'local/css/img/image.jpg');
imagedestroy($image);
imagedestroy($watermark);}



if (defined('IN_ADMIN'))    // non applicable à l'interface d'administration
    return;
  add_event_handler('loc_end_picture', 'my_watermark');

Je vérifie sans problème par FTP que l'image modifiée est bien sauvegardée dans local/css/img/image.jpg.
Lorsque je fais un var_dump de $template, je vois que c'est bien cette URL qui est reçue par le template ... mais l'image qui s'affiche est toujours celle d'origine, sans le watermark !

Qu'est-ce que j'ai pu oublier ?

Hors ligne

#14 2011-12-08 23:51:07

flop25
Équipe Piwigo
2006-07-06
6544

Re: Modification d'une image avant affichage

tu as éliminé l'effet cache du navigateur ?
en cliquant "afficher l'image", l'url est celle de ton image ou l'autre ?

Hors ligne

#15 2011-12-08 23:59:04

tosca
Former Piwigo Team
Cévennes (Gard)
2006-09-23
3818

Re: Modification d'une image avant affichage

flop25 a écrit:

tu as éliminé l'effet cache du navigateur ?
en cliquant "afficher l'image", l'url est celle de ton image ou l'autre ?

L'URL est celle de l'image d'origine, pas celle correspondant à l'image modifiée. Ce qui voudrait dire qu'un peu plus loin dans le script, ce que j'ai indiqué comme URL est écrasé par l'URL initiale ?

Hors ligne

  •  » Plugins
  •  » Modification d'une image avant affichage

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2025 · Contact