phpInfo.netLes ArchivesLes éléPHPants

  
  Accueil
  Trucs & Astuces
  Scripts
  Regex
  Annuaire
  Articles

.
      
 Astuces   PHP  GD/Graphiques


Afficher en taille réduite les images d'un répertoire[18-01-2002]
Posté par Oliv

Affiche toutes les images que contient un répertoire en taille réduite de hauteur définie et de largeur proportionelle, avec un lien cliquable sur chaque photo qui ouvre dans une nouvelle fenêtre la photo à taille réelle.

<?
// url du fichier qui contien les photos
$urlphoto = "http://www.monsite.com/photos";

// nom du répertoire qui contien les photos
$nomRepertoire = "photos";
$dossier = opendir($nomRepertoire);
while (
$Fichier = readdir($dossier))
{
  if (
$Fichier != "." && $Fichier != "..")
  {
    
$nomFichier = $Fichier;
    
// Hauteur de toutes les photos
    
$h_vign = "120";
    
$taille = getimagesize($nomRepertoire."/".$Fichier);
    
$reduc  = floor(($h_vign*100)/($taille[1]));
    
$l_vign = floor(($taille[0]*$reduc)/100);

    echo
"<a target=\"blank\" href=\"$urlphoto/$nomFichier\">";
    echo
"<img src=\"$urlphoto/$nomFichier\" ";
    echo
"width='$l_vign' height='$h_vign'>";
    echo
"</a>&nbsp;";
  }
}  
closedir($dossier);
?>


JPGraph 1.4 et - : problème de label[06-01-2002]
Posté par François BAUD

Intitulé :
Superposer sur un même graphe deux tracés, un barchart et une courbe. La courbe représente par exemple des valeurs prises chaque jours ouvrés. Le chart représente la moyenne mensuelle de ces valeurs.

Problèmes :
. Le nombre de jours ouvrés varie chaque mois, et la courbe ne peut pas repartir à 0 tous les WE; de plus, c'est une courbe qui est demandée, par des points par valeurs. Peut-on alors normer l'axe des abcisses à x(1)=22 pour janvier 2001, x(2)=x(1)+20 pour février 2001 etc.., ceci en affichant le nom du mois ?
. Contrainte de JpGraph - SetTickLabels() correspond EXACTEMENT au nombre de valeurs comprises dans notre tableau plus haut, et prend par défaut le tableau le plus long.

Réponse :
Non, pas directement en tous cas. Ce que permet JpGraph, c'est de normer toutes les n x(i) valeurs (SetTextTickInterval()).

Solutions :
1. Faire un tick exacte, ie. un tick pour chaque nombre de jours ouvrés ? Genre [22, 20, 21...] ? Ca n'est pas possible avec JpGraph.
2. Alors certes on peut s'embeter à ajouter les jours fériés et les WE dans le tableaux des valeurs, puis à lier simplement les points en omettant ces valeurs, c'est un solution, celle qui est exacte mais fastidieuse, et qui fait ramer sans politique de cache des graphes.
3. La solution un peu plus crade, mais qui fonctionne très bien si ces graphes sont annuels, celle que j'ai choisi pour ma part. Elle revient à se dire qu'en moyenne, par mois, il y a 21
jours ouvrés. Et fixer ainsi l'intervalle des ticks à 21, puis de jouer avec les mois avec cette petite fonction :


function SetMonthLabel_businessDay($ARRAY_values, $AVG_businessDay)
{
  $months = array ("Jan", "Feb", "Mar", "Apr", "May", "Jun",
                   "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
  for ($i=0 ; $i < sizeof ($ARRAY_values) ; $i++)
  {
    if (!($i%$AVG_businessDay))
    {
      $ARRAY_months[$i] = $months[$TICK%12] ;
      $TICK ++ ;
    }
  }
  return $ARRAY_months ;
}

Voilà j'espère que cela servir à ceux d'entre-vous qui utilisent cette librairie vraiment géniale qu'est JpGraph.

Ombrage automatique d'images[09-12-2001]
Posté par Christophe Faizant

Cette fonction permet d'ombrer automatiquement des images existantes, sans avoir à les ouvrir une à une dans un logiciel de retouche pour appliquer l'effet puis les réenregistrer.

La fonction prend le chemin de l'image en paramètre, et proportionne deux des cinq fichiers *.gif consituant l'ombre.
La fonction retourne le code html correspondant (il s'agit de l'image passée en paramètre, entourée des gifs d'ombre, le tout dans un tableau html simple).

Pour une démo et pour télécharger les fichiers : cliquez là.

Le poids total des fichiers images constituant l'ombre est inférieur à 0.7 ko.
Ceux-ci ayant été créés sur un background blanc, ils sont à modifier si les images doivent reposer sur un fond d'une couleur différente.

<?

function ombre($image)
{
    if(!
is_readable($image))
    {
        die(
"image introuvable");
    }

    
$taille = getimagesize($image);
    
$html = "
        <table border='0' cellpadding='0' cellspacing='0'>
        <tr>
                <td rowspan='2' colspan='2'><img src='$image'></td>
                <td><img src='ombre_1.gif'></td>
        </tr>
        <tr>
                <td><img src='ombre_2.gif' height='"
.($taille[1]-8)."' width='6'></td>
        </tr>
        <tr>
                <td><img src='ombre_3.gif'></td>
                <td><img src='ombre_4.gif' height='8' width='"
.($taille[0]-7)."'></td>
                <td><img src='ombre_5.gif'></td>
        </tr>
        </table>"
;

    return
$html;
}

?>


Obtenir la couleur inverse d'une couleur donnée[12-08-2001]
Posté par Denis Combe

Vous désirez obtenir la couleur inverse de celle demandée, ainsi le texte se verra toujours quelque soit le fond et inversement... :-)
Voici le script :

<?

$c_orig
="1002a8"; // couleur d'origine (ex pour le fd)

$b=hexdec($c_orig);
$c=decbin($b);
print
"$c <br>";
$long=strlen($c);

if (
$long < 24) // si les premières valeurs = 0
{
    
$add_1 = 24-$long;
    for (
$z=0; $z < $add_1; $z++)
    {
        
$resultat .= 1;
    }
}
for (
$n=0; $n < $long; $n++)
{
    
$car=substr($c,$n,1);
    
// si car-1 =-1 alors on le multiplie par lui même pour faire +1
    
$newval=($car-1)*($car-1);
    
$resultat .= $newval;
}
print
"$resultat <br>";
$d = bindec($resultat);
$c_inv = dechex($d);
print
$c_orig;
print
"<br>";
print
$c_inv; // couleur obtenue (inverse)

?>


[2 commentaires]

Polices TrueType et ImageTTFText()[11-08-2001]

Pour pouvoir utiliser des polices TrueType Windows avec la fonction ImageTTFText() lors de la génération d'images à la volée, il est obligatoire d'indiqué le chemin absolu permettant d'accéder au fichier :

<?
$image
= imagecreate(200, 200);
$noir  = imagecolorallocate($image, 0, 0, 0);
$blanc = imagecolorallocate($image, 255, 255, 255);

imagefill($image, 0, 0, $noir);
imagettftext($image, 10, 0, 50, 50, $blanc, "/mes_polices/comic.ttf", "Texte TTF");

header("Content-type: image/gif");
imagegif($image);

imagedestroy($image);
?>


[2 commentaires]

Afficher une image au hasard[08-06-2001]
Posté par Tom

Une petite astuce qu'il ne me semble pas encore avoir vue ici, qu'un ami que j'essaie de "php'iser" me demandait : "mettre une image différente à chaque chargement de la page".

<?
$imgs
= array("bebe.gif", "cooky.gif", "poule.gif", "vache.gif");
srand ((double)microtime()*1000000);
shuffle($imgs);
echo
'<IMG SRC="img/' . $imgs[0] . '" BORDER = "0">';
?>

Bon, bien-sûr, c'est vraiment le B.A-BA, mais ça peut être utile . Aussi, on peut utiliser un opendir() pour lister toutes les images d'un dossier aussi avec :

<?
$dir
= opendir("img/");
while(
$file = readdir($dir))
{
  if(
eregi(".*\.(gif|png|jpg|jpe|jpeg|bmp|wbmp|xpm)$", $file) &&
     
is_file($file))
    
$imgs[] = $file;
}
closedir($dir);
?>


Là, le script teste si le fichier a une extension qui pourrait correspondre à une image (j'en ai peut-être oubliées) et va ensuite voir si cela est un fichier (car is_file est une fonction gourmande). On peut sûrement utiliser getimgasize, mais je n'ai pas testé (Rmq : je n'ai pas testé ceci non plus, mais bon ;-))

[1 commentaire]

Générer une combobox qui affiche les couleurs web[15-05-2001]
Posté par LPA

Il arrive souvent que dans les parties d'administration de sites l'administrateur veuille gérer les couleurs de telle ou telle chose

Plutôt que de lui laisser saisir les couleurs "à la main", il est intéressant de lui proposer une liste des couleurs.

D'où cette fonction qui génère une combobox avec toutes les couleurs websafe.

<?
function Afficher_Combo_Couleurs($nom="LPA")
{
$st = "<select name=\"".$nom."\" size=1>";
for (
$i=0; $i<256; $i+=51)
{
  for (
$j=0; $j<256 ; $j+=51)
  {
    for (
$k=0; $k < 256; $k+=51)
    {
      
$coul = sprintf("%02X%02X%02X", $i, $j, $k);
      
$st .= "<option style=\"background-color: #".$coul.";\">#";
      
$st .= $coul."n";
    }
  }
}
$st.= "</select>";
return
$st;
}
?>

Pour l'utiliser, rien de plus simple, on peut faire par exemple :

<?
echo Afficher_Combo_Couleurs("coulfond");
?>


Création de graphique à barres[25-04-2001]
Posté par Christophe Faizant

Voici une petite astuce que je viens de mettre au point. Il s'agit en fait de créer un graphique sans utiliser le dll GD. Le graphique créé (à barres) peut par exemple comparer le nombre de produits par catégorie, issus d'une bdd ou bien d'autres choses encore. Tout ceci peut bien sûr être adapté pour donner naissance à une fonction, si l'on a besoin de s'en servir plusieurs fois dans un programme.

Explications en fin de script.

<table cellspacing="0">
<tr><td>Catégorie</td><td>graphique</td></tr>

<?
$a
= 46;
$b = 15;
$c = 33;
$total = $a+$b+$c;
$tabvaleurs = array("a"=>$a,"b"=>$b,"c"=>$c);
while (
$test = each($tabvaleurs))
{
    
$precis = number_format(($test[1]*100)/$total, 2, ",", " ");
    
$barre = floor($precis)*3;
    echo
"<tr><td>Catégorie $test[0] ($precis%) </td>";
    echo
"<td width='300' height='20' background='fond.gif'><im
    src='barre.gif' width='$barre' height='10'></td></tr>"
;
}
?>

</table>

Ici les valeurs de $a, $b et $c sont déjà dans le code pour l'exemple mais leur provenance peut être diverse (count d'un select, etc). Pour l'exemple elles sont au nombre de trois, stockées dans un tableau $tabvaleurs. On crée un tableau html à deux colonnes.

Ensuite pour chaque élément de $tabvaleurs, on calcule le pourcentage représenté par la quantité correspondante. On formatte ce nombre à x.n,nn afin de pouvoir l'afficher proprement, entre parenthèses avec l'intitulé de la catégorie en question (2 chiffres après la virgule sont suffisamment précis).

Ensuite on reprend cette valeur mais en l'arrondissant, puis en multipliant le résultat par 3 (vous allez voir pourquoi ;-).

A l'aide de l'html, on affiche le fichier barre.gif (que j'ai crée en bleu, d'une taille de 1px de large *10 de haut), et qui prend comme attribut de largeur $barre c'est à dire la valeur arrondie (pour l'html) du pourcentage de la catégorie. J'ai volontairement multiplié par 3 $barre pour que les différences entre les barres soient visuellement plus marquées. Enfin, j'ai mis en background un gif quadrillé tous les 10 pixels, de 300 de large (100%*3), ce qui permet de mieux visualiser le tout.

On pourrait aussi, sortis de la boucle rajouter une ligne, avec une image sous la colonne des graphs (en continuité visuelle avec les backgrounds précédents), où seraient numérotés les tranches : 10% 20% 30% etc.

Galerie d’images (intranet ou local)[25-04-2001]
Posté par Christophe Faizant

Cette fonction permet de générer automatiquement les miniatures des vos images jpeg, gif ou png stockées dans un répertoire, avec un lien vers la photo en taille réelle, le tout sur une seule page, sans avoir à créer l'homologue miniaturisé de l'image.

La fonction est personnalisable avec le chemin et la réduction de taille (ex "img/" et "25" pour créer des miniatures photos du répertoire 'img', mesurant 25% de la taille originale).

L'affichage des miniatures ne fait que réduire leurs dimensions afin d'en avoir un aperçu d'un coup d'œil. Etant donné que les fichiers sont entièrement chargés, je préconise de limiter cette méthode à des sites intranet ou directement en local (le chargement est donc très rapide), car l'affichage serait trop long pour des internautes, surtout s'ils ne disposent pas d'une connexion rapide.

<?
function gallery($rep,$reduc)
{
    
$open = opendir($rep);
    while ((
$image = readdir($open))
    {
        if ((
$image != ".") && ($image != ".."))
        {
            
$taille = getimagesize($rep.$image);
            
$l_vign = floor(($taille[0]*$reduc)/100);
            
$h_vign = floor(($taille[1]*$reduc)/100);
            echo
"<a href='galerie.php4?photo=$rep$image'>";
            echo
"<img src='$rep$image' width='$l_vign' height='$h_vign'></a>";
            echo
"&nbsp;&nbsp;&nbsp;";
        }
    }
}


#appel de la fonction, (si l'on ne vient pas déjà de la galerie)
#passant comme paramètre le nom du répertoire et la réduction (à personnaliser)
#si on vient de la galerie, affichage de l'image en taille réelle et lien
#de retour

if ($photo != "")
{
    echo
"<center><img src='$photo'>";
    echo
"<br><br><a href='javascript:history.go(-1)'>RETOUR</a></center>";
}
else
{
    
gallery("img/",25);
}
?>


Utiliser la fonction getImageSize()[04-03-2001]
Posté par Pierre Crevoisier

Dans la mesure où je viens de me casser la tête et les neurones à comprendre ce qui ne fonctionnait pas, je vous fait profiter de mon expérience...

Avant la version 4.0.5 de PHP, la fonction getImageSize() ne fonctionnait qu'avec une adresse relative.
Exemple: getImageSize("images/mon_image");

Si vous tentiez getImageSize("http://www.machin.com/mon_repertoire/images/mon_image"), ça ne marchait pas.
En fait, il fallait donner le chemin complet du système de fichier en allant chercher la variable d'environnement DOCUMENT_ROOT.

Exemple:

<?
$root
= getenv("DOCUMENT_ROOT");
getimagesize($root."/mon_repertoire/images/mon_image");
?>

ou

<?
getImageSize
(getenv("DOCUMENT_ROOT")."/mon_repertoire/images/mon_image");
?>

Voilà, mais le support URL pour getImageSize est intégré à PHP 4.0.5.

[1 commentaire]

Synseo