From 9a1fb624fd1089087bd363551ba64f5862d9919f Mon Sep 17 00:00:00 2001 From: polo Date: Fri, 18 Feb 2022 05:38:40 +0100 Subject: miniatures GD --- model/Album.php | 21 +++++++++++-------- model/Image.php | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 68 insertions(+), 15 deletions(-) (limited to 'model') diff --git a/model/Album.php b/model/Album.php index 386a50f..e716a99 100644 --- a/model/Album.php +++ b/model/Album.php @@ -21,7 +21,7 @@ class Album extends Article // fonctions CRUD // create - public function createVignette($titre, $annee, $pochette) + public function createVignette($titre, $annee, $pochette, $pochetteMini) { //$this->format = 'json'; @@ -33,6 +33,7 @@ class Album extends Article require('model/Image.php'); $Image = new Image(false); $Image->upload(); + $Image->makeThumbnail(); $erreur = $Image->erreur; if(!empty($erreur)) @@ -40,7 +41,7 @@ class Album extends Article } // encodage avec un tableau simple - $albumJSON = json_encode([$titre, $annee, $pochette]); + $albumJSON = json_encode([$titre, $annee, $pochette, $pochetteMini]); //var_dump($albumJSON); die(); // encodage avec un tableau associatif @@ -66,15 +67,13 @@ class Album extends Article for($i = 0; $i < $this->fileListCount; $i++) { // ajout du JSON - /*$content = file_get_contents($this->fileList[$i]['fileName']); - $content = json_decode($content, true);*/ $content = json_decode($this->fileList[$i]['content'], true); - //var_dump($content); die(); // lecture de $content étant un tableau simple $this->fileList[$i]['titre'] = $content[0]; $this->fileList[$i]['annee'] = $content[1]; $this->fileList[$i]['pochette'] = $content[2]; + $this->fileList[$i]['pochetteMini'] = $content[3]; // ajout du HTML si il existe if(file_exists('data/' . $this->page . '/' . $this->format . '/' . $this->fileList[$i]['fileCode'] . '.' . $this->format)) @@ -107,6 +106,7 @@ class Album extends Article $this->oneAlbum['titre'] = $content[0]; $this->oneAlbum['annee'] = $content[1]; $this->oneAlbum['pochette'] = $content[2]; + $this->oneAlbum['pochetteMini'] = $content[3]; // html $this->format = 'html'; @@ -138,14 +138,18 @@ class Album extends Article } // update - public function updateVignetteJSON($titre, $annee, $pochette) + public function updateVignetteJSON($titre, $annee, $pochette, $pochetteMini) { - // garder l'ancienne image + // garder l'image si aucune n'est sélectionnée + // (on ne peut pas préremplir un ) $albumJSON = self::getVignetteJSON(); + /*var_dump($pochette); var_dump($pochetteMini); + var_dump($albumJSON); die();*/ if($pochette == '') { $pochette = $albumJSON[2]; + $pochetteMini = $albumJSON[3]; } else { @@ -153,6 +157,7 @@ class Album extends Article require('model/Image.php'); $Image = new Image(false); $Image->upload(); + $Image->makeThumbnail(); $erreur = $Image->erreur; if(!empty($erreur)) { @@ -161,7 +166,7 @@ class Album extends Article } } - $albumJSON = json_encode([$titre, $annee, $pochette]); + $albumJSON = json_encode([$titre, $annee, $pochette, $pochetteMini]); // écriture $nom_fichier = 'data/discographie/json/' . $this->albumCode . '.json'; diff --git a/model/Image.php b/model/Image.php index 8ebcd16..c305984 100644 --- a/model/Image.php +++ b/model/Image.php @@ -5,7 +5,10 @@ class Image { private const MAX_WEIGHT = 2000000; // à adapter au php.ini private $page; - private $ajax = false; // vaut true avec le ckeditor + private $ajax; // vaut true avec le ckeditor + public $path; + public $pathMini; + public $pathInfos; public $erreur; public function __construct($ajax) @@ -13,14 +16,14 @@ class Image // get envoyé avec le javascript $this->page = $_GET['page']; $this->ajax = $ajax; + $this->path = 'data/' . $this->page . '/images/'; + $this->pathMini = 'data/' . $this->page . '/images-mini/'; } // GET // SET - // miniatures des photos - public function upload() { // traitement et enregistrement de l'image @@ -28,14 +31,14 @@ class Image { if ($_FILES['upload']['size'] <= self::MAX_WEIGHT) { - $infos = pathinfo($_FILES['upload']['name']); - $extension = $infos['extension']; + $this->pathInfos = pathinfo($_FILES['upload']['name']); + $extension = $this->pathInfos['extension']; $extautorisées = array('jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'tiff'); // on prend la même liste que celle côté javascript, le SVG est bloqué pour raison de sécurité (javascript à l'intérieur) if (in_array($extension, $extautorisées)) { - move_uploaded_file($_FILES['upload']['tmp_name'], 'data/' . $this->page . '/images/' . $_FILES['upload']['name']); - chmod('data/' . $this->page . '/images/' . $_FILES['upload']['name'], 0666); + move_uploaded_file($_FILES['upload']['tmp_name'], $this->path . $_FILES['upload']['name']); + chmod($this->path . $_FILES['upload']['name'], 0666); } else{$this->erreur = 'mauvais format, veuillez utiliser une image comportant un de ces formats: jpg ou jpeg, png, gif, bmp, webp, tiff
le format svg n\'est pas supporté';} } @@ -57,4 +60,49 @@ class Image echo $chemin; } } + + // miniatures des photos + public function makeThumbnail() + { + if($imageLibrary == 'gd') + { + // des infos sur GD + //print_r(gd_info()); + + // cette fonction fonctionne pour tous les formats + $source = imagecreatefromstring(file_get_contents($this->path . $_FILES['upload']['name'])); + var_dump($source); + + $nomMiniImage = $this->pathMini . $this->pathInfos['filename'] . '-mini.jpg'; + var_dump($nomMiniImage); + + //var_dump($nomMiniImage); + //var_dump(imagesx($image)); + + $forme = imagesy($source) / imagesx($source); + var_dump($forme); + + if(imagesx($source) > 201) + { + // créer un rectangle noir + $destination = imagecreatetruecolor(201, 201 * $forme); + var_dump($destination); + + // sélectionne un rectangle dans l'image source + // et le place dans un rectangle dans la nouvelle + imagecopyresampled($destination, $source, 0, 0, 0, 0, 201, 201 * $forme, imagesx($source), imagesy($source)); + + // envoie l'image dans un fichier + imagejpeg($destination, $nomMiniImage); + } + else + { + imagejpeg($source, $nomMiniImage); + } + } + elseif($imageLibrary == 'imagick') + {} + else + {} + } } \ No newline at end of file -- cgit v1.2.3