(En construction)

Cours 1 : introduction


TD 1 : td1


Cours 2 : constante, variables, types, opérateurs et structures de contrôle


TD 2 : td2


Cours 3 : tableaux


TD 3td3


Cours 4 : fonctions et concept POO


TD 4 : td4


TD 5 : td5


Cours 5 : Classes


Cours 6 : Formulaires


TP 1 : tp1


TP 2 : tp2


TP 3 : tp3

Fichiers utiles : Vichy_Labo.jpg carte_droite.gif carte_gauche.gif

classImage.php :

<?php

class Image
{

	private $width,$height;
	private $image;
	private $image_type;

	public function __construct()
	{
		$cpt = func_num_args();
		$args = func_get_args();

		switch($cpt)
		{
			case '0' : 
				exit ("Il faut au moins un argument");
				break;
			case '1':
				$filename=$args[0];
				$image_info=getimagesize($filename);
				$this->image_type=$image_info[2];
				if ($this->image_type == IMAGETYPE_JPEG) {
					//echo"coucou";
					$this->image = imagecreatefromjpeg($filename);
				} elseif ($this->image_type == IMAGETYPE_GIF) {
					$this->image = imagecreatefromgif($filename);
				} elseif ($this->image_type == IMAGETYPE_PNG) {
					$this->image = imagecreatefrompng($filename);
				} else {
					throw new Exception("The file you're trying to open is not supported");
				}
				$this->width=imagesx($this->image);
				$this->height=imagesy($this->image);

				break;
			case '2':
				$this->width=$args[0];
				$this->height=$args[1];
				$this->image_type=IMAGETYPE_PNG;
				$this->image=imagecreatetruecolor($this->width,$this->height);
				break;
			default:
				break;
		}
		
		
		//or die('Cannot initialize');	
	}

	public function getWidth()
	{
		return $this->width;
	}
	public function getHeight()
	{
		return $this->height;
	}
	public function getImage()
	{
		return $this->image;
	}
	public function changeCouleurImageXY($i,$j,$niveauR,$niveauV,$niveauB)
	{

		$couleur = imagecolorallocate($this->image,$niveauR,$niveauV,$niveauB);
		imagesetpixel($this->image,$i, $j, $couleur);
	}
	public function getRougeImageXY($i,$j)
	{
		$rgb = imagecolorat($this->image, $i, $j);
		$r = ($rgb >> 16) & 0xFF;
		return $r;
	}
	public function getBleuImageXY($i,$j)
	{
		$rgb = imagecolorat($this->image, $i, $j);
		$b = $rgb & 0xFF;
		return $b;
	}
	public function getVertImageXY($i,$j)
	{
		$rgb = imagecolorat($this->image, $i, $j);
		$g = ($rgb >> 8) & 0xFF;
		return $g;
	}
	public function afficherImage()
	{
		if ($this->image_type == IMAGETYPE_JPEG) {
			header("Content-type: image/jpeg");
			imagejpeg($this->image, null);
		} elseif ($this->image_type == IMAGETYPE_GIF) {
			header("Content-type: image/gif");
			imagegif($this->image);         
		} elseif ($this->image_type == IMAGETYPE_PNG) {
			header("Content-type: image/png");
			imagepng($this->image);
		}
		header("Content-type: image/png"); //la ligne qui change tout !
		imagepng($this->image);
	}
}




?>

 

Exemple 1 : affichage d'une image rouge de 100x100

 

<?php
include "classImage.php";


$monImage = new Image(100,100);



for($i=0;$i<$monImage->getWidth();$i++)
{
	for($j=0;$j<$monImage->getHeight();$j++)
	{
		
		$monImage->changeCouleurImageXY($i,$j,255,0,0);
	}
	
}
// pour faire de l affichage texte ne pas afficher l image
//echo "Rouge (10,10) = ".$monImage->getRougeImageXY(10,10)."</br>";
//echo "Vert (10,10) = ".$monImage->getVertImageXY(10,10)."</br>";
//echo "Bleu (10,10) = ".$monImage->getBleuImageXY(10,10)."</br>";



$monImage->afficherImage(); //renvoie une image sous format png
imagedestroy($monImage->getImage()); 
?>

 

Exemple 2 : affichage d'une image test.jpg ou de sa taille (présente dans le même répertoire que votre script php)

 

<?php
include "classImage.php";
$monImage = new Image("test.jpg");
// pour faire de l affichage texte ne pas afficher l image
//echo " Largeur  de l’image  en  pixel  = ". $monImage->getWidth(). " </br >";
//echo " Hauteurde  l’image  en  pixel  = ". $monImage->getHeight(). " </br >";

$monImage->afficherImage ();
imagedestroy( $monImage->getImage());
?>

TP 4 :

A partir de données, stockées dans un fichier json, issues du site web https://geo.api.gouv.fr/ nous allons calculer des statistiques sur les départements du Puy de Dôme ou de l’Allier (vous pouvez également choisir le département de votre choix en utilisant les outils fournies sur le site https://geo.api.gouv.fr/ : en ligne de commande tapez cette commande pour enregistrer les données relatives au Puy de Dôme dans le fichier communes63.json :

curl 'https://geo.api.gouv.fr/departements/63/communes' > communes63.json

NB : il suffit de changer le numéro du département dans la ligne de commande ci-dessus pour travailler sur le département de votre choix.

Nous avons récupéré pour vous à l’aide de la commande ci-dessus deux fichiers :

Exemple extrait du fichier communes63.json :

[{"nom":"Aigueperse","code":"63001","codeDepartement":"63","codeRegion":"84","codesPostaux":["63260"],"population":2720},
{"nom":"Aix-la-Fayette", "code":"63002", "codeDepartement":"63", "codeRegion":"84", "codesPostaux":["63980"], "population":91},

………………………………

{"nom":"Yssac-la-Tourette", "code":"63473", "codeDepartement":"63", "codeRegion":"84", "codesPostaux":["63200"],"population":380}]

On vous demande de coder en php deux classes (Commune et Département respectivement dans le fichier classCommune.php et classDepartement.php) dont vous trouverez le diagramme uml ci-dessous :

Ces deux classes nous permettront dans un script php (statDepartement.php) que vous coderez d’afficher différentes statistiques sur un département donné.

Dans un premier temps il faut récupérer les données contenues dans le fichier json dans une variable php à l’aide des fonctions php prédéfinies suivantes :

$json = file_get_contents("communes63.json");

$communes = json_decode($json);

Dans un second temps vous aurez besoin de créer un tableau d’objets de type Commune qui sera utilisé pour instancier un nouvel objet de type Departement :

//création d'un tableau d'objets Commune
foreach ($communes as $commune) {
	$tabCommune[] = new Commune($commune->nom,$commune->codesPostaux, $commune->codeDepartement, $commune->population);
}

Enfin il suffit d’instancier un nouvel objet de type Departement avec les bonnes options (voir constructeur) et d’appeler les méthodes publiques que vous avez codées dans la classe Departement qui permettent l’affichage des statistiques.

 

Bonus : essayez de faire cela