ben3w

Vous n'êtes pas connecté.

#1 16-12-2006 09:55:11

gigli
Membre

Affichage des images et miniatures via la librairie GD

Titre : Utilisation de GD
Version : v0.1
Pour 2BGal : 3.1 RC1
Date : 16 décembre 2006
Auteur : Gigli
Description : Utilisation de la libraire GD pour afficher les images
Base de donnée modifiée
Fichiers modifiés :
    - admin/affiche_album.inc.php
    - admin/affiche_image.inc.php
    - admin/default.inc.php
    - admin/photointro_direct.inc.php
    - admin/statdefault.inc.php
    - album.php
    - img.php
    - index.php
    - serie.php
Fichiers ajoutés:
    - admin/get_img.php
    - admin/get_thumb.php
    - get_img.php
    - get_thumb.php
Licence : GPL


L'objectif de cette modification est de permettre d'une part une meilleure protection des images (quel intérêt de mettre un mot de passe pour une galerie si on peut accéder aux images directement sur le serveur?), et d'autre part de bénéficier d'améliorations quant à l'affichage des images (ex: ajout automatique de filigrane, redimensionnement des images, effet d'ombres, ....).

L'affichage d'une image se fait ainsi par l'appel d'un script php contenant en paramètre l'id de l'image et le secureid si le mot de passe est indiqué, au lieu de l'accès direct au fichier

<img src="http://site/rep/image.jpg"> remplacé par <img src="http://site/get_img.php?id_img=123">

La première modification à faire concerne la base de données. Le champ "image" de la base "galbumlist" contient l'accès physique à l'image miniature. Il doit être remplacé par l'id de l'image originale.
Par exemple si le champ contient "rep1/mini_img_1234.jpg" il faut trouver l'id de l'image img_1234.jpg dans la base gimagelist (ex:121) et le mettre à la place de "rep1/mini_img_1234.jpg".

Dans admin/ créer deux fichiers:

Fichier: admin/get_img.php

Code:

<?php
//Entrée:
//id_img=id de l'image à afficher

require("../lib/fonctions.inc.php");
$start_time=get_moment();
require("../connect.inc.php");
require("../config.inc.php");

//Vérification du nom du script appelant
//Vide si le script est appellé directement en ligne de commande => on interdit
if(empty($_SERVER["HTTP_REFERER"]))
    exit(1);

//recuperation des variables
if (isset($_GET["id_img"])) {$id_img=$_GET["id_img"];} else {erreurRC(3);}

//securite : type des variables
if (!ereg("^([0-9]+)$",$id_img,$secereg)) {erreurRC(3);}

//connexion a la database
($db = @mysql_connect("$serveur", "$utilisateur", "$motdepasse")) or erreurRC(1);
@mysql_select_db("$database",$db) or erreurRC(2);

$chaine="SELECT url,folder FROM ".$tbl_ilist." LEFT JOIN ".$tbl_alist." ON ".$tbl_ilist.".album=".$tbl_alist.".id WHERE ".$tbl_ilist.".id=".$id_img;
$request = MYSQL_QUERY($chaine);
$nb_rep = MYSQL_NUMROWS($request);
if ($nb_rep!=1) {erreurRC(4);}
//Récupération du nom de l'image
$img = mysql_result($request,0,"url");

//Récupération du nom du répertoire
$directory = mysql_result($request,0,"folder");

$imageData=imagecreatefromjpeg("../img/$directory/$img");

    //On récupère la date et l'heure dans l'Exif
    $exif=exif_read_data("../img/$directory/$img");
    if(!$exif["DateTimeOriginal"]===FALSE)         {
        ereg("^([0-9]{4}):([0-9]{2}):([0-9]{2})(.*)",$exif["DateTimeOriginal"],$regs);
        $aff="$regs[3]/$regs[2]/$regs[1]$regs[4]";
        list($srcw,$srch)=getimagesize("../img/$directory/$img");
        imagestring($imageData,3,10,$srch-20,$aff,imagecolorallocate($imageData,247,245,204));
        }

header("Content-type: image/jpeg");
imageJpeg($imageData);
imagedestroy($imageData);
?>

Fichier: admin/get_img.php

Code:

<?php
//Entrée:
//id_img=id de l'image à afficher en miniature

require("../lib/fonctions.inc.php");
$start_time=get_moment();
require("../connect.inc.php");
require("../config.inc.php");

//securite #1 : pas d'appel direct du fichier
if(empty($_SERVER["HTTP_REFERER"]))
    exit(1);

//recuperation des variables
if (isset($_GET["id_img"])) {$id_img=$_GET["id_img"];} else {erreurRC(3);}

//securite : type des variables
if (!ereg("^([0-9]+)$",$id_img,$secereg)) {erreurRC(3);}

//connexion a la database
($db = @mysql_connect("$serveur", "$utilisateur", "$motdepasse")) or erreurRC(1);
@mysql_select_db("$database",$db) or erreurRC(2);

$chaine="SELECT url,folder FROM ".$tbl_ilist." LEFT JOIN ".$tbl_alist." ON ".$tbl_ilist.".album=".$tbl_alist.".id WHERE ".$tbl_ilist.".id=".$id_img;
$request = MYSQL_QUERY($chaine);
$nb_rep = MYSQL_NUMROWS($request);
if ($nb_rep!=1) {erreurRC(4);}
//Récupération du nom de l'image
$img = mysql_result($request,0,"url");

//Récupération du nom du répertoire
$directory = mysql_result($request,0,"folder");

$imageData=imagecreatefromjpeg("../img/$directory/mini_$img");
/*    //On récupère la date et l'heure dans l'Exif
    $exif=exif_read_data("Images/$directory/$img");
    if(!$exif["DateTimeOriginal"]===FALSE)         {
        ereg("^([0-9]{4}):([0-9]{2}):([0-9]{2})(.*)",$exif["DateTimeOriginal"],$regs);
        $aff="$regs[3]/$regs[2]/$regs[1]$regs[4]";
        list($srcw,$srch)=getimagesize("Images/$directory/$img");
        imagestring($imageData,3,10,$srch-20,$aff,imagecolorallocate($imageData,247,245,204));
        }
*/
header("Content-type: image/jpeg");
imageJpeg($imageData);
imagedestroy($imageData);
?>

Fichier: admin/affiche_album.inc.php
Ligne 49 remplacer :

Code:

$chaine="SELECT nom,folder FROM $tbl_alist WHERE id=$id_album";

par

Code:

$chaine="SELECT nom,folder,secureid FROM $tbl_alist WHERE id=$id_album";

Ligne 52, ajouter :

Code:

$secure = mysql_result($res,0,"secureid");

Ligne 94, remplacer :

Code:

$url_imgbig = "../img/".$folder."/".$url_img;
$url_imgmini = "../img/".$folder."/mini_".$url_img;
$isfile = is_file($url_imgmini);

par

Code:

$url_imgbig = "get_img.php?id_img=$id_img".($secure?"&secure=$secure":"");
$url_imgmini = "../img/".$folder."/mini_".$url_img;
$isfile = is_file($url_imgmini);
$url_imgmini = "get_thumb.php?id_img=$id_img".($secure?"&secure=$secure":"");

Fichier: admin/affiche_image.inc.php
Ligne 57, ajouter:

Code:

$url_imgbig = "get_img?id_img=$id_img";

Fichier: admin/default.inc.php
Ligne 64, ajouter:

Code:

$secure = mysql_result($list_album,$i,"secureid");

Ligne 151, remplacer:

Code:

echo "<td><img src=\"../img/".$image_album."\" alt=\"\" /></td>\n";

par

Code:

echo "<td><img src=\"get_thumb.php?id_img=$image_album".($secure?"&secure=$secure":"")."\" alt=\"\" /></td>\n";

Fichier: admin/photointro_direct.inc.php
Ligne 49, remplacer:

Code:

$chaine2="UPDATE ".$tbl_alist." SET image='".$folder."/mini_".$url."' WHERE id=".$id_album;

par

Code:

$chaine2="UPDATE ".$tbl_alist." SET image='".$id_img."' WHERE id=".$id_album;

Fichier: admin/statdefault.inc.php
Ligne 125, remplacer:

Code:

echo "    <td><img src=\"../img/".$folder_image."/mini_".$url_image."\" alt=\"X\" width=\"50\" /></td>\n";

par

Code:

echo "    <td><img src=\"get_thumb?id_img=$id_image\" alt=\"X\" width=\"50\" /></td>\n";

Ligne 162, remplacer

Code:

echo "<td><img src=\"../img/".$folder_image."/mini_".$url_image."\" alt=\"X\" width=\"50\" /></td>\n";

par

Code:

echo "<td><img src=\"get_thumb?id_img=$id_image\" alt=\"X\" width=\"50\" /></td>\n";

Terminé pour la partie admin.

Dans le répertoire racine de l'installation, créer deux fichiers:
Fichier get_img.php:

Code:

<?php
//Entrée:
//id_img=id de l'image à afficher
//secure=code de protection de la galerie

include("lib/template.inc");
require("lib/fonctions.inc.php");
$start_time=get_moment();
require("connect.inc.php");
require("config.inc.php");

//Vérification du nom du script appelant
//Vide si le script est appellé directement en ligne de commande => on interdit
if(empty($_SERVER["HTTP_REFERER"]))
    exit(1);

//recuperation des variables
if (isset($_GET["id_img"])) {$id_img=$_GET["id_img"];} else {erreurRC(3);}
if (isset($_GET["secure"])) {$secure=$_GET["secure"];} else {$secure="";}

//securite : type des variables
if (!ereg("^([0-9]+)$",$id_img,$secereg)) {erreurRC(3);}
if (((!ereg("^([a-z0-9]+)$",$secure,$secereg)) OR (strlen($secure)!=20)) AND (strlen($secure)!=0)) {erreurRC(3);}

//connexion a la database
($db = @mysql_connect("$serveur", "$utilisateur", "$motdepasse")) or erreurRC(1);
@mysql_select_db("$database",$db) or erreurRC(2);

//As-t-on le droit de lire ce répertoire?
//verif pwd
$chaine="SELECT album,url FROM ".$tbl_ilist." WHERE id=".$id_img;
$request = MYSQL_QUERY($chaine);
$nb_rep = MYSQL_NUMROWS($request);
if ($nb_rep!=1) {erreurRC(4);}
$id_album = mysql_result($request,0,"album");
//Récupération du nom de l'image
$img = mysql_result($request,0,"url");

$chaine="SELECT secureid,folder FROM ".$tbl_alist." WHERE id=".$id_album;
$request = MYSQL_QUERY($chaine);
$secureid_album = mysql_result($request,0,"secureid");
if ($secure!=$secureid_album) {erreurRC(5);}
//Récupération du nom du répertoire
$directory = mysql_result($request,0,"folder");

$imageData=imagecreatefromjpeg("img/$directory/$img");

    //On récupère la date et l'heure dans l'Exif
    $exif=exif_read_data("img/$directory/$img");
    if(!$exif["DateTimeOriginal"]===FALSE)         {
        ereg("^([0-9]{4}):([0-9]{2}):([0-9]{2})(.*)",$exif["DateTimeOriginal"],$regs);
        $aff="$regs[3]/$regs[2]/$regs[1]$regs[4]";
        list($srcw,$srch)=getimagesize("img/$directory/$img");
        imagestring($imageData,3,10,$srch-20,$aff,imagecolorallocate($imageData,247,245,204));
        }

header("Content-type: image/jpeg");
imageJpeg($imageData);
imagedestroy($imageData);
?>

Fichier get_thumb.php:

Code:

<?php
//Entrée:
//id_img=id de l'image à afficher en miniature
//secure=code de protection de la galerie

include("lib/template.inc");
require("lib/fonctions.inc.php");
$start_time=get_moment();
require("connect.inc.php");
require("config.inc.php");

//Vérification du nom du script appelant
//Vide si le script est appellé directement en ligne de commande => on interdit
if(empty($_SERVER["HTTP_REFERER"]))
    exit(1);

//recuperation des variables
if (isset($_GET["id_img"])) {$id_img=$_GET["id_img"];} else {erreurRC(3);}
if (isset($_GET["secure"])) {$secure=$_GET["secure"];} else {$secure="";}

//securite : type des variables
if (!ereg("^([0-9]+)$",$id_img,$secereg)) {erreurRC(3);}
if (((!ereg("^([a-z0-9]+)$",$secure,$secereg)) OR (strlen($secure)!=20)) AND (strlen($secure)!=0)) {erreurRC(3);}

//connexion a la database
($db = @mysql_connect("$serveur", "$utilisateur", "$motdepasse")) or erreurRC(1);
@mysql_select_db("$database",$db) or erreurRC(2);

//As-t-on le droit de lire ce répertoire?
//verif pwd
$chaine="SELECT album,url FROM ".$tbl_ilist." WHERE id=".$id_img;
$request = MYSQL_QUERY($chaine);
$nb_rep = MYSQL_NUMROWS($request);
if ($nb_rep!=1) {erreurRC(4);}
$id_album = mysql_result($request,0,"album");
//Récupération du nom de l'image
$img = mysql_result($request,0,"url");

$chaine="SELECT secureid,folder FROM ".$tbl_alist." WHERE id=".$id_album;
$request = MYSQL_QUERY($chaine);
$secureid_album = mysql_result($request,0,"secureid");
if ($secure!=$secureid_album) {erreurRC(5);}
//Récupération du nom du répertoire
$directory = mysql_result($request,0,"folder");

$imageData=imagecreatefromjpeg("img/$directory/mini_$img");

/*    //On récupère la date et l'heure dans l'Exif
    $exif=exif_read_data("Images/$directory/$img");
    if(!$exif["DateTimeOriginal"]===FALSE)         {
        ereg("^([0-9]{4}):([0-9]{2}):([0-9]{2})(.*)",$exif["DateTimeOriginal"],$regs);
        $aff="$regs[3]/$regs[2]/$regs[1]$regs[4]";
        list($srcw,$srch)=getimagesize("Images/$directory/$img");
        imagestring($imageData,3,10,$srch-20,$aff,imagecolorallocate($imageData,247,245,204));
        }
*/
header("Content-type: image/jpeg");
imageJpeg($imageData);
imagedestroy($imageData);
?>

Fichier: album.php
Ligne 141, remplacer:

Code:

$url="img/".$image_browsealbum;

par

Code:

$url="get_thumb.php?id_img=$image_browsealbum".($secure?"&secure=$secure":"");

Fichier: img.php
Ligne 123, ajouter:

Code:

$url_imgbig = "get_img.php?id_img=$id_img".($secure?"&secure=$secure":"");

Fichier: index.php
Ligne 99, remplacer:

Code:

$url="img/".$image_browsealbum;

par

Code:

$url=$secureid_browsealbum?"img/".$image_browsealbum:"get_thumb.php?id_img=$image_browsealbum";

Ligne 236, remplacer:

Code:

$url="img/".$folder_image."/mini_".$url_image;
$url_imgbig = "img/".$folder_image."/".$url_image;

par

Code:

$url="get_thumb.php?id_img=$id_image";
$url_imgbig = "get_img.php?id_img=$id_image";

Ligne 288, remplacer

Code:

$url="img/".$folder_image."/mini_".$url_image;
$url_imgbig = "img/".$folder_image."/".$url_image;

par

Code:

$url="get_thumb.php?id_img=$id_image";
$url_imgbig = "get_img.php?id_img=$id_image";

Fichier: serie.php
Ligne 160, remplacer:

Code:

$url_imgmini = "img/".$folder_currentalbum."/mini_".$url_img;

par

Code:

$url_imgmini = "get_thumb.php?id_img=$id_img".($secure?"&secure=$secure":"");

Et enfin pour protéger les images, dans le répertoire img/ créer le fichier .htaccess contenant la ligne

Code:

deny from all

Et voilà pour la modification, j'espère n'avoir rien oublié.

Vous devriez obtenir quelque chose de similaire à ma galerie. Noter l'ajout à la volée de la date/heure contenue dans l'exif du fichier origniale.

Merci de me dire si vous trouvez cette modification pertinente, et les améliorations à apporter.

Dernière modification par gigli (16-12-2006 11:04:41)

Hors ligne

 

#2 19-12-2006 10:36:16

Philippe
Membre

Re: Affichage des images et miniatures via la librairie GD

Bonjour gigli
Peut'on ajouter du texte ( genre : ©PALM ) avant la date et l'heurre sur la photo et ou ?
Je n'y connait en rien en programmation et j'ai beau relire tes fichiers modifiés, je ne vois pas ou.
Merci pour cette modif. que j'ai integrée rapidement aprés avoir réinstallé 2BGal.  smile
Elle ne fonctionné pas avec les autres modif. (Vidéo, Image intro aléatoire .....)  sad
Philippe

Hors ligne

 

#3 21-12-2006 19:08:59

gigli
Membre

Re: Affichage des images et miniatures via la librairie GD

Philippe a écrit:

Bonjour gigli
Peut'on ajouter du texte ( genre : ©PALM ) avant la date et l'heurre sur la photo et ou ?
Je n'y connait en rien en programmation et j'ai beau relire tes fichiers modifiés, je ne vois pas ou.

Dans le fichier get_img.php situé à la racine, remplace la ligne 52:

Code:

$aff="$regs[3]/$regs[2]/$regs[1]$regs[4]";

par

Code:

$aff="©PALM $regs[3]/$regs[2]/$regs[1]$regs[4]";

Hors ligne

 

#4 21-12-2006 19:26:48

gigli
Membre

Re: Affichage des images et miniatures via la librairie GD

Concernant l'add-on "Image aléatoire":

Voici le fichier foncGetRandomImage.inc.php à utiliser:

Code:

<?php
//ADD-ON GetRandomImage
function getFils($idPere,$tAlbumList) {
    $arrFils = array();
    //-- récupération des fils du rép
    $chaine = "SELECT id, gere FROM ".$tAlbumList." WHERE idpere=".$idPere;
    $request = MYSQL_QUERY($chaine);
    $nb_fils = MYSQL_NUMROWS($request);
    if ($nb_fils > 0) {
        for($li=0;$li<$nb_fils;$li++) {
            $id_fils = mysql_result($request,$li,"id");
            $type_fils = mysql_result($request,$li,"gere");
            if ($type_fils == "pere") {
                $arrFils = $arrFils + getFils($id_fils,$tAlbumList);
            } else {
                if ($id_fils > 0) {
                    $arrFils[] = $id_fils;
                }
            }
        }
    }
    return $arrFils;
} //end  getFils
//ADD-ON END GetRandomImage

function getRandomImage($image_album,$gere_album,$id_album,$tAlbumList,$tImgList) {
    //-- si on n'a pas d'image define on prends une au hasard
    if ($image_album == "../mini_default.jpg") {
        $arr_fils = array();
        //-- si c'est album  pere on prend au hasard un de ses fils
        if ($gere_album == "pere") {
            //-- on cherche les fils
            $arr_fils = getFils($id_album,$tAlbumList);
            $nb_fils = count($arr_fils);
            if ($nb_fils > 0) {
                $rand_fils = rand(0,$nb_fils-1);
                $fils_id = $arr_fils[$rand_fils];
            }
        } else {
            $fils_id = $id_album;
        }
        //-- recuperer une photo aleatoire du repertoire choisi
        //$chaine = "SELECT i.url, a.folder FROM ".$tImgList." i, ".$tAlbumList." a WHERE a.id=i.album and i.album=".$fils_id;
        $chaine = "SELECT i.id FROM ".$tImgList." i, ".$tAlbumList." a WHERE a.id=i.album and i.album=".$fils_id;
        $request = MYSQL_QUERY($chaine);
        $nb_img = MYSQL_NUMROWS($request);
        if ($nb_img > 0) {
            $rand_img = rand(0,$nb_img-1);
            $image_album = mysql_result($request,$rand_img,"id");;
        }
    }
    return $image_album;
} //end  getRandomImage
?>

Hors ligne

 

#5 21-12-2006 20:13:11

Philippe
Membre

Re: Affichage des images et miniatures via la librairie GD

Bonjour,
Je fait la modif. immédiatement  big_smile  smile
Et le plus, les photos aléatoires big_smile big_smile
Merci gigli   smile wink
cool
Ps : pour le ©, je pense qu'il faut le coder en &copy; mais cela ne marche pas !!

Dernière modification par Philippe (21-12-2006 23:08:10)

Hors ligne

 

#6 23-12-2006 00:53:02

gigli
Membre

Re: Affichage des images et miniatures via la librairie GD

C'est un problème d'encodage lié à la fonction de création de la chaine de caractères. Je me charge de trouver une parade.
Et je regarde aussi pour les vidéos.

Hors ligne

 

#7 23-12-2006 10:54:19

Philippe
Membre

Re: Affichage des images et miniatures via la librairie GD

gigli a écrit:

C'est un problème d'encodage lié à la fonction de création de la chaine de caractères. Je me charge de trouver une parade.
Et je regarde aussi pour les vidéos.

Merci gigli tongue
J'ai des vidéos mais avec la nouvelle versions 2BGal, je n'arrive plus a les afficher.
C'est sympa de voir ce module.
Joyeux Noël à tout le monde big_smile big_smile
Et une bonne fin d'année big_smile big_smile
Philippe
PS1  : Merci
PS2  : "La création de la chaine de caractères" Poura-t-on modifier la taille de la police ??
PS3  : Merci wink big_smile

Dernière modification par Philippe (02-01-2007 00:02:37)

Hors ligne

 

#8 06-01-2007 22:24:55

defre
Membre

Re: Affichage des images et miniatures via la librairie GD

bonjour,

merci pour ce code, c'est excellent !

par contre ça efface les donnees exif, il n'y a plus rien, a part la date et l'heure sur la tof c'est tout, c'est bien dommage, y a t-il une parade ?

merci

fred

Hors ligne

 

#9 05-02-2007 02:16:43

ViriisXP
Membre

Re: Affichage des images et miniatures via la librairie GD

gigli a écrit:

Philippe a écrit:

Bonjour gigli
Peut'on ajouter du texte ( genre : ©PALM ) avant la date et l'heurre sur la photo et ou ?
Je n'y connait en rien en programmation et j'ai beau relire tes fichiers modifiés, je ne vois pas ou.

Dans le fichier get_img.php situé à la racine, remplace la ligne 52:

Code:

$aff="$regs[3]/$regs[2]/$regs[1]$regs[4]";

par

Code:

$aff="©PALM $regs[3]/$regs[2]/$regs[1]$regs[4]";

salut, oki tu parle pour le copyright , mais plus haut tu parle d'image en filigramme, moi evidemment ce qui m'interesse est de mettre mon copyright sur l'image (il s'agit d'un logo que je peux mettre dans le format adéquat, c'est pas un soucis) , mais comment l'insérer ?



j'ai aussi une autre question, j'aimerais que mes images puissent etre télécharger par un bouton , au format HD , mais qu'elle comportent surtout le copyright de mon logo , tu pense pouvoir me donner une réponse ?


ps je t'ai ajouter a mon msn en esperant que tu puisse m'aider ! wink



bon j'ai trouver pour l'image :

Dans le fichier get_img.php situé à la racine, à la ligne 56:
insérez :

Code:

$source = imagecreatefromgif("copyright.gif"); //on ouvre l'image source donc le copyright    
$details_src = getimagesize("copyright.gif"); //on récupère les dimensions de l'image source        
$y = imagesy($imageData)-imagesy($source);
imagecopymerge($imageData,$source, 0, $y, 0, 0, $details_src[0],$details_src[1],50); //on copie l'image

Bon pour le bouton de dwl hd je cherche encore , par contre j'aimerais aussi que cette image la soit redimentionner, mais pas en super grand, genre en 300x300 , mais je sais tjs pas comment faire ... si je trouve pareil je vous donne les infos.

Dernière modification par ViriisXP (05-02-2007 03:32:53)

Hors ligne

 

#10 05-02-2007 10:59:31

Philippe
Membre

Re: Affichage des images et miniatures via la librairie GD

Salut  ViriisXP
Le scripte pour ajouter le copyright et pas mal.
Je l'ai mis avec le texte de  gigli.
Une question :
Peut’ on  redimensionner, positionner le copyright ??  dans  :
  imagecopymerge($imageData,$source, 0, $y, 0, 0, $details_src[0],$details_src[1],50); //on copie l'image

Merci encore a vous tous qui faite avancer le scripte
Philippe

Hors ligne

 

#11 05-02-2007 18:54:09

ViriisXP
Membre

Re: Affichage des images et miniatures via la librairie GD

Philippe a écrit:

Salut  ViriisXP
Le scripte pour ajouter le copyright et pas mal.
Je l'ai mis avec le texte de  gigli.
Une question :
Peut’ on  redimensionner, positionner le copyright ??  dans  :
  imagecopymerge($imageData,$source, 0, $y, 0, 0, $details_src[0],$details_src[1],50); //on copie l'image

Merci encore a vous tous qui faite avancer le scripte
Philippe

La base est : imagecopymerge ($imageData, $source, $dest_x, $dest_y, $src_x, $src_y, $src_largeur, $src_hauteur, $taux);


Code:

$imageData = L'image qui sera traiter .
$source      = L'image du copyright .
$dest_x      = La position de ton copyright sur l'axe X
$dest_y      = La position de ton copyright sur l'axe Y (en l'occurence pour nous j'y ai mis $y  ce qui est le bas de l'image $imageData en l'occurence), si tu change le $y par une valeur çà déplacera le copyright sur l'axe Y
$src_x        = Le point de départ de la selection du copyright sur l'axe X.
$src_y        = Le point de départ de la selection du copyright sur l'axe Y.
$src_largeur= La taille de ton copyright sur l'axe X (en l'occurence pour nous il s'agit des paramètres qui ont été récupérer dans "$details_src = getimagesize("copyright.gif");" donc : $src_largeur = $details_src[0]
$src_hauteur= La taille de ton copyright sur l'axe Y(en l'occurence pour nous il s'agit des paramètres qui ont été récupérer dans "$details_src = getimagesize("copyright.gif");" donc : $src_largeur = $details_src[1]
$taux          = Le taux de compression de ton image au final .

Donc admettons que vous avez une image ou on met le copyright :

Code:

En haut a droite : 

  imagecopymerge($imageData,$source, $y, 0, 0, 0, $details_src[0],$details_src[1],50); //on copie l'image

En haut a gauche : 

  imagecopymerge($imageData,$source, 0, 0, 0, 0, $details_src[0],$details_src[1],50); //on copie l'image

En bas a droite : 

  imagecopymerge($imageData,$source, $y, $y, 0, 0, $details_src[0],$details_src[1],50); //on copie l'image

En bas a gauche : (celui de départ de mon code)

  imagecopymerge($imageData,$source, 0, $y, 0, 0, $details_src[0],$details_src[1],50); //on copie l'image

Voila ^^




PS : Notions de base
GD sait dessiner des formes basiques si vous lui indiquez où est le crayon, le papier et ce que vous voulez dessiner. Tout d'abord, il faut connaître le système de coordonnées de GD. Pour GD, l'origine du carré est en haut à gauche. L'axe horizontal est l'axe des abscisses (x) et l'axe vertical est l'axe des ordonnées (y). Il n'y a pas de troisième dimension avec GD. On ne travaille qu'en 2D. Il y a des fois, c'est assez compliqué avec 2 dimensions seulement.
http://mtodorovic.developpez.com/php/gd/images/coords.jpg

Hors ligne

 

#12 06-02-2007 01:08:36

ViriisXP
Membre

Re: Affichage des images et miniatures via la librairie GD

Bon j'ai trouver pour le redimentionnement de l'image :


Moi j'utilise pas l'exif donc  :
Ouvrir : get_img.php:
A la ligne 46 : trouver :

Code:

$imageData=imagecreatefromjpeg("img/$directory/$img");

    //On récupère la date et l'heure dans l'Exif
    $exif=exif_read_data("img/$directory/$img");
    if(!$exif["DateTimeOriginal"]===FALSE)         {
        ereg("^([0-9]{4}):([0-9]{2}):([0-9]{2})(.*)",$exif["DateTimeOriginal"],$regs);
        $aff="$regs[3]/$regs[2]/$regs[1]$regs[4]";
        list($srcw,$srch)=getimagesize("img/$directory/$img");
        imagestring($imageData,3,10,$srch-20,$aff,imagecolorallocate($imageData,247,245,204));
        }

Remplacer par :

Code:

$ratio = .3;
// Calcul des nouvelles dimensions
list($largeur, $hauteur) = getimagesize("img/$directory/$img"); //list est un moyen plus pratique pour ne récupérer que ce qu'on veut
$n_largeur = $largeur * $ratio;
$n_hauteur = $hauteur * $ratio;
//on ouvre la source
$source = imagecreatefromjpeg("img/$directory/$img");
//création de la destination
$destination = imagecreatetruecolor($n_largeur, $n_hauteur);
// Redimensionnement
imagecopyresized($destination, $source, 0, 0, 0, 0, $n_largeur, $n_hauteur, $largeur, $hauteur);
// [ajout du copyright]        
$source = imagecreatefromgif("copyright.gif"); //on ouvre l'image source donc le copyright    
$details_src = getimagesize("copyright.gif"); //on récupère les dimensions de l'image source        
$y = imagesy($destination)-imagesy($source);
imagecopymerge($destination,$source, 0, $y, 0, 0, $details_src[0],$details_src[1],50); //on copie l'image

Hors ligne

 

#13 07-02-2007 04:16:55

ViriisXP
Membre

Re: Affichage des images et miniatures via la librairie GD

Bon pour le download de l'image en full qualité :

Créer un fichier : dwl_img.php

Code:

<?php
// on spécifie le type de fichier créer (ici une image de type jpeg)


//connexion a la database
require("connect.inc.php");
require("config.inc.php");
($db = @mysql_connect("$serveur", "$utilisateur", "$motdepasse")) or erreurRC(1);
@mysql_select_db("$database",$db) or die('Impossible de lire dans la bdd');
if (isset($_GET["id_img"])) {$id_img=$_GET["id_img"];}

//As-t-on le droit de lire ce répertoire?
//verif pwd
$chaine="SELECT album,url FROM ".$tbl_ilist." WHERE id=".$id_img;
$request = MYSQL_QUERY($chaine);
$nb_rep = MYSQL_NUMROWS($request);
if ($nb_rep!=1) {erreurRC(4);}
$id_album = mysql_result($request,0,"album");
//Récupération du nom de l'image
$img = mysql_result($request,0,"url");

$chaine="SELECT secureid,folder FROM ".$tbl_alist." WHERE id=".$id_album;
$request = MYSQL_QUERY($chaine);

//Récupération du nom du répertoire
$directory = mysql_result($request,0,"folder");



$ratio = 1;

// Calcul des nouvelles dimensions
list($largeur, $hauteur) = getimagesize("img/$directory/$img"); //list est un moyen plus pratique pour ne récupérer que ce qu'on veut
$n_largeur = $largeur * $ratio;
$n_hauteur = $hauteur * $ratio;


//on ouvre la source
$source = imagecreatefromjpeg("img/$directory/$img");
//création de la destination
$destination = imagecreatetruecolor($n_largeur, $n_hauteur);
// Redimensionnement
@imagecopyresized($destination, $source, 0, 0, 0, 0, $n_largeur, $n_hauteur, $largeur, $hauteur)or die ("Erreur lors de la création de l'image");
// [ajout du copyright]        
$source = imagecreatefromgif("copyright.gif"); //on ouvre l'image source donc le copyright    
$details_src = getimagesize("copyright.gif"); //on récupère les dimensions de l'image source        
$y = imagesy($destination)-imagesy($source);

@imagecopymerge($destination,$source, 0, $y, 0, 0, $details_src[0],$details_src[1],50)or die ("Erreur lors de la création de l'image"); //on copie l'image


header('Content-type: image/jpg');
header("Content-Disposition: attachment; filename=$img");
imagejpeg($destination)or die ("Attention l'image $destination n'as pas pus etre afficher");
imagedestroy($destination)or die ("Attention l'image $destination n'as pas pus etre supprimer");
imagedestroy($imageData)or die ("Attention l'image $imageData n'as pas pus etre supprimer");
imagedestroy($source)or die ("Attention l'image $source n'as pas pus etre supprimer");
?>

Ouvrir le fichier img.tpl de votre style :
Ligne 29 trouvez :

Code:

<img class="galimgafficherphoto" src="{URLIMGBIG}" title="{IDIMG}" alt="X" />

Remplacer par :

Code:

<a href="dwl_img.php?id_img={IDIMG}" title="Télécharger l'image en qualité HD"><img class="galimgafficherphoto" src="{URLIMGBIG}" title="{IMGLABEL}" alt="{IDIMG}" /></a>

Voilà , vous avez des pages de miniatures, des images moyennes avec copyright, et quand vous cliquez sur l'image , vous télécharger l'image en full quality .

Hors ligne

 

#14 11-04-2007 22:22:45

gigli
Membre

Re: Affichage des images et miniatures via la librairie GD

Bonjour,

Ca faisait un bout de temps que je ne m'étais pas connecté, et je suis content de trouver des adeptes de cette adaptation.
Et bravo pour les ajouts.
Je pense que l'on pourrait aller plus loin, en proposant dans les options les tailles d'affichage, le texte affiché ou une image de copyright, etc etc...
Concernant l'upload de vidéos j'ai trouvé un moyen de le faire, mais ça fonctionne assez mal chez Free à cause des limitations imposées.

a+

Hors ligne

 

#15 18-11-2009 16:08:08

dark
Membre

Re: Affichage des images et miniatures via la librairie GD

Et enfin pour protéger les images, dans le répertoire img/ créer le fichier .htaccess contenant la ligne
Code:
deny from all

Bonjour,
je ne comprend pourquoi il faut créer ce dernier fichier et comment faut-il le nommer.
".htaccess" et l'extension?

Hors ligne

 

#16 27-01-2010 23:35:51

liloune89
Membre

Re: Affichage des images et miniatures via la librairie GD

merci pour ce tuto très intéressant et bien pratique ! ;-)

Hors ligne

 

#17 11-04-2010 21:30:53

soporis
Membre

Re: Affichage des images et miniatures via la librairie GD

bonsoir,
Je voudrais savoir si il est possible de mettre le copyright au centre de la photo afin d'éviter que les gens le supprime juste en rognant les coter ?

Hors ligne

 

Pied de page du Forum

un forum PunBB