ajax = $ajax; $this->page = $page; $this->folder = $folder; $this->permissions = $permissions; $this->path = 'data/' . $this->folder . '/images/'; $this->pathMini = 'data/' . $this->folder . '/images-mini/'; } // GET // SET public function setFolder(string $folder) { $this->folder = $folder; $this->path = 'data/' . $this->folder . '/images/'; $this->pathMini = 'data/' . $this->folder . '/images-mini/'; } public function setFileName($fileName) { $this->FileName = $fileName; } public function setThumbnailWidth(int $width) { $this->width = $width; } public function upload() { // traitement et enregistrement de l'image if (isset($_FILES['upload']) AND $_FILES['upload']['error'] == 0) // 0 signifie ok { //$this->pathInfos = pathinfo($_FILES['upload']['name']); $this->pathInfos = pathinfo($this->FileName); $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'], $this->path . $this->FileName); chmod($this->path . $this->FileName, $this->permissions); } 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é'; } } else { $this->erreur = 'Erreur: Le fichier n\'a pas pu être téléchargé correctement.
Au fait, "upload_max_filesize" dans le php.ini vaut ' . ini_get('upload_max_filesize') . '.'; } // retour des rêquetes AJAX if($this->ajax && empty($Image->erreur)) { // chemin en JSON attendu par l'éditeur $this->reponseAjax = '{"url": "data/' . $this->folder . '/images/' . $this->FileName . '"}'; } } // miniatures des photos public function makeThumbnail() { global $imageLibrary; if($imageLibrary == 'imagick') { $Image = new Imagick($this->path . $this->FileName); $source = $Image->getImageGeometry(); if($source['width'] > $this->width) { // 0 signifie qu'on conserve les proportions $Image->thumbnailImage($this->width, 0); } // écriture dans un fichier $nomMiniImage = $this->pathMini . $this->pathInfos['filename'] . '-mini.' . $this->pathInfos['extension']; $Image->writeImage($nomMiniImage); chmod($nomMiniImage, $this->permissions); } elseif($imageLibrary == 'gd') { // cette fonction fonctionne pour tous les formats $source = imagecreatefromstring(file_get_contents($this->path . $this->FileName)); // on créera un jpg quelque soit l'image d'origine // nécessite une correction du html dans Article::makeHtmlMiniImages() $nomMiniImage = $this->pathMini . $this->pathInfos['filename'] . '-mini.jpg'; $ratio = imagesy($source) / imagesx($source); if(imagesx($source) > $this->width) { $height = intval($this->width * $ratio); // GD veut des pixels entiers // créer un rectangle noir $destination = imagecreatetruecolor($this->width, $height); // sélectionne un rectangle dans l'image source // et le place dans un rectangle dans la nouvelle imagecopyresampled($destination, $source, 0, 0, 0, 0, $this->width, $height, imagesx($source), imagesy($source)); // envoie l'image dans un fichier imagejpeg($destination, $nomMiniImage); } else { imagejpeg($source, $nomMiniImage); } chmod($nomMiniImage, $this->permissions); } else { // utiliser la grande image si il est impossible de créer une miniature // message d'erreur $_SESSION['erreur'] = addslashes("Echec de la création d'une miniature. Vérifier le fichier config.php"); header('Location: index.php?page=' . $this->folder . '&erreur=dependance_bibli_images'); exit(); } } }