Site Web en PHP pour présenter des photos https://superflux.antopie.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.php 9.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. <?php
  2. if (!isset($_GET['chemin'])) {
  3. header('Location: index.php?chemin=');
  4. }
  5. function creerMiniature($cheminComplet, $adresseImage, $nomImage) {
  6. if (!file_exists($cheminComplet . "/400/" . $nomImage)) {
  7. $image = imagecreatefromjpeg($adresseImage);
  8. $dimensions = getimagesize($adresseImage);
  9. $nouvHauteur = ((400 * $dimensions[1]) / $dimensions[0]);
  10. $imageSrt = imagecreatetruecolor(400, $nouvHauteur);
  11. imagecopyresampled($imageSrt, $image, 0, 0, 0, 0, 400, $nouvHauteur, $dimensions[0], $dimensions[1]);
  12. imagejpeg($imageSrt, $cheminComplet . "/400/" . $nomImage);
  13. imagedestroy($imageSrt);
  14. imagedestroy($image);
  15. }
  16. if (!file_exists($cheminComplet . "/800/" . $nomImage)) {
  17. $image = imagecreatefromjpeg($adresseImage);
  18. $dimensions = getimagesize($adresseImage);
  19. $nouvHauteur = ((800 * $dimensions[1]) / $dimensions[0]);
  20. $imageSrt = imagecreatetruecolor(800, $nouvHauteur);
  21. imagecopyresampled($imageSrt, $image, 0, 0, 0, 0, 800, $nouvHauteur, $dimensions[0], $dimensions[1]);
  22. imagejpeg($imageSrt, $cheminComplet . "/800/" . $nomImage);
  23. imagedestroy($imageSrt);
  24. imagedestroy($image);
  25. }
  26. }
  27. if (!function_exists('array_key_last')) {
  28. function array_key_last($array) {
  29. $key = NULL;
  30. if (is_array($array)) {
  31. end($array);
  32. $key = key($array);
  33. }
  34. return $key;
  35. }
  36. } ?>
  37. <!DOCTYPE HTML>
  38. <html lang="fr">
  39. <head>
  40. <meta charset="UTF-8" />
  41. <title>Super·F·lux<?php
  42. $nomDossiers = preg_split("#/#", $_GET['chemin']); // Sépare le chemin en une liste de dossiers qui le composent
  43. foreach ($nomDossiers as $niveauDossier => $nomDossier) {
  44. if (isset($nomDossier)) {
  45. if (!is_null($nomDossier)) {
  46. echo " > " . $nomDossier;
  47. }
  48. }
  49. }
  50. ?></title>
  51. <meta name="author" content="Cécile Chevallier">
  52. <meta name="publisher" content="Miraty">
  53. <meta name="distribution" content="global">
  54. <meta name="robots" content="index, follow">
  55. <meta name="keywords" lang="fr" content="superflux">
  56. <meta name="description" content="Super·F·lux, photographies de Cécile Chevallier sous CC BY-SA 4.0">
  57. <meta name="viewport" content="width=device-width, initial-scale=1">
  58. <style>
  59. <?php
  60. $env = "prod";
  61. require "lessphp/lessc.inc.php";
  62. $less = new lessc;
  63. if ($env == "prod") { // En production : minimise et met en cache style.less dans style.css
  64. $less->setFormatter("compressed");
  65. $less->checkedCompile("style.less", "style.css");
  66. echo file_get_contents("ubuntu/ubuntu.min.css") . file_get_contents("style.css"); // Inclus toutes les CSS dans le document HTML (= moins de requêtes HTTP)
  67. } else if ($env == "dev") { // En développement : compile style.less à chaque chargement de page
  68. echo file_get_contents("ubuntu/ubuntu.min.css") . $less->compileFile("style.less");
  69. } else {
  70. echo "Erreur : $env doit valoir prod ou dev";
  71. } ?>
  72. </style>
  73. <!-- Lightbox https://lokeshdhakar.com/projects/lightbox2/ -->
  74. <link href="lightbox/dist/css/lightbox.min.css" rel="stylesheet">
  75. <script src="lightbox/dist/js/lightbox-plus-jquery.min.js"></script>
  76. <script>
  77. lightbox.option({
  78. 'resizeDuration': 0,
  79. 'fadeDuration': 200
  80. })
  81. </script>
  82. </head>
  83. <body>
  84. <header>
  85. <h1><a href="index.php" title="Retour à la page d'accueil">Super·F·lux</a></h1>
  86. <?php
  87. $nomDossiers = preg_split("#/#", $_GET['chemin']); // Sépare le chemin en une liste de dossiers qui le composent
  88. foreach ($nomDossiers as $niveauDossier => $nomDossier) { ?>
  89. <h<?php echo $niveauDossier + 2; ?>><a href="index.php?chemin=<?php
  90. if (array_key_last($nomDossiers) == $niveauDossier) {
  91. echo $_GET['chemin'];
  92. } else {
  93. echo rtrim(stristr($_GET['chemin'], $nomDossiers[$niveauDossier + 1], TRUE), "/");
  94. }
  95. ?>"><?php echo $nomDossier; ?></a></h<?php echo $niveauDossier + 2; ?>>
  96. <section class="presentation">
  97. <?php
  98. switch ($nomDossier) {
  99. case "Escape games": ?>
  100. De ces instants qui échappent aux lois de la gravité, sortent du cadre ou des sentiers battus, changent de cap, là où on aperçoit enfin le bout du tunnel, là où on peut enfin prend l'air…
  101. <br>
  102. Ouverture des possibles.
  103. <?php break;
  104. case "Le chant du Petit": ?>
  105. Les petites choses chantent aussi.
  106. <?php break;
  107. case "Landscape games": ?>
  108. Lieux d’émergence des Escape games. Composés des mille et un chants du Petit.
  109. <?php break;
  110. case "Créatures fantastiques": ?>
  111. Je vais mieux quand d’un arbre émerge une grand-mère prenant soin d'une jeune touffe d'herbe, un oiseau dans une fleur, un visage sur un arbre, un dragon dans les nuages.
  112. <br>
  113. Je me sens vivante quand j'aperçois un coq émergeant d'une crotte de chien sur un trottoir, quand la fée des neiges apparaît à mon balcon, quand les ombres suggèrent peut-être des oiseaux végétaux, quand un visage apparaît dans une feuille de chou.
  114. <?php break;
  115. case "s-Faire-s": ?>
  116. Au contraire du croisement de fer, ce qui croît quand on l's Faire (s) les sphères.
  117. <?php break;
  118. case "Super-Positions et autres Super-Cheries": ?>
  119. Montages et collages sous logiciel dédié (Photoshop, peintures)…
  120. <?php break;
  121. case "Traits de lumière": ?>
  122. Light-Painting, peindre avec la lumière, ou plutôt avec l’appareil-pinceau, puisque peindre avec la lumière est déjà l’objet de la photographie. Ces traits révèlent parfois des créatures fantastiques.
  123. <?php break;
  124. case "Aqua bon": ?>
  125. Lieu et source de vie par essence, mouvante, calme ou soulevée par la brise, l’eau est souvent le lieu de naissance de créatures fantastiques.
  126. <?php break;
  127. case "Forts Traits": ?>
  128. Portraits studio, cours municipaux pour adultes, 2015
  129. <?php break;
  130. case "": ?>
  131. <div class="contPremiereImage"><img class="premiereImage" src="index.jpg" alt="Vive la lenteur"/></div>
  132. Super·F·lux est une collection de perceptions lumineuses (lux) du monde tel que je (une ·F· Femme) l'aime (Super).
  133. <br><br>
  134. Des instants, des phénomènes, des êtres, des petites choses qui peuvent sembler superflues, anodines, banales, pas originales, à côté desquelles il est tout à fait possible de passer sans les voir. Et qui sont pourtant essentielles.
  135. <blockquote>
  136. « Je préfère vivre dans un monde animé. Je crois que nos chances de créer une culture plus saine, dynamique, libre et équilibrée sont meilleures si nous nous percevons nous-mêmes comme des cellules vivantes appartenant à un corps vivant, imprégné d’une conscience sous-jacente, plutôt que de percevoir le monde comme de la matière inanimée et exploitable. »
  137. <br>
  138. <div class="source"><cite><small>Starhawk, « Quel monde voulons-nous ? », éditions Cambourakis, collection Sorcières, 2019</small></cite></div>
  139. </blockquote>
  140. <?php break;
  141. } ?>
  142. </section>
  143. <?php } ?>
  144. </header>
  145. <main>
  146. <?php if (preg_match("#\.\.#", $_GET['chemin'])) {
  147. exit("Par sécurité, .. ne peut être utilisé dans un chemin");
  148. } else {
  149. $cheminComplet = "catalogue/" . $_GET['chemin'] . "";
  150. if (!file_exists($cheminComplet . "/400")) {
  151. mkdir($cheminComplet . "/400");
  152. }
  153. if (!file_exists($cheminComplet . "/800")) {
  154. mkdir($cheminComplet . "/800");
  155. }
  156. $listeElements = new DirectoryIterator($cheminComplet);
  157. $nbElementsAffiches = 0;
  158. foreach($listeElements as $listeElements) {
  159. if ((!$listeElements->isDot()) AND ($listeElements->getFilename() !== "400") AND ($listeElements->getFilename() !== "800")) { // Ignore les éléments "." et ".." ainsi que les dossiers d'images redimensionnées
  160. $adresseImage = $cheminComplet . "/" . $listeElements->getFilename();
  161. if (is_dir($adresseImage)) { ?>
  162. <div class="element dossier">
  163. <a href="index.php?chemin=<?php if (!empty($_GET['chemin'])) {
  164. echo $_GET['chemin'] . "/" . $listeElements->getFilename();
  165. } else {
  166. echo $listeElements->getFilename();
  167. }
  168. ?>">
  169. <img src="<?php echo $cheminComplet . "/" . $listeElements->getFilename() . "/400/index.jpg"; ?>">
  170. <div class="nomElementDossier"><?php echo $listeElements->getFilename(); ?></div>
  171. </a>
  172. </div>
  173. <?php
  174. } else if (is_file($adresseImage)) {
  175. creerMiniature($cheminComplet, $adresseImage, $listeElements->getFilename())
  176. ?>
  177. <div class="element image<?php
  178. $dimensions = getimagesize($adresseImage);
  179. if ($dimensions[0] > $dimensions[1]) {
  180. echo " paysage";
  181. } else {
  182. echo " portrait";
  183. }
  184. ?>">
  185. <a href="<?php echo $cheminComplet . "/" . $listeElements->getFilename(); ?>" data-title="Image créée par Cécile Chevallier et diffusée sous CC BY-SA 4.0." data-lightbox="<?php echo $listeElements->getFilename(); ?>">
  186. <img src="<?php
  187. if ($dimensions[0] > $dimensions[1]) {
  188. echo $cheminComplet . "/800/" . $listeElements->getFilename();
  189. } else {
  190. echo $cheminComplet . "/400/" . $listeElements->getFilename();
  191. }
  192. ?>" alt=""/>
  193. </a>
  194. </div>
  195. <?php
  196. } else {
  197. echo $cheminComplet . $listeElements->getFilename();
  198. echo "ERREUR PHP : L'élément n'est ni un fichier ni un dossier !";
  199. }
  200. ?>
  201. <?php
  202. $nbElementsAffiches++;
  203. } } } ?>
  204. </main>
  205. <footer>
  206. <br>
  207. Images créées par Cécile Chevallier et diffusées sous CC BY-SA 4.0.
  208. <br>
  209. <a href="https://code.antopie.org/miraty/superflux">Site Web</a> créé par <a href="https://www.antopie.org">Miraty</a> sous <a href="LICENSE.html">AGPLv3+</a>.
  210. </footer>
  211. </body>
  212. </html>