1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
<?php
// model/Image.php
class Image
{
private $page;
private $ajax; // vaut true avec le ckeditor
public $reponseAjax;
public $path;
public $pathMini;
public $pathInfos;
public $erreur;
public function __construct($ajax)
{
// get envoyé avec le javascript
$this->ajax = $ajax;
$this->page = $_GET['page'];
$this->path = 'data/' . $this->page . '/images/';
$this->pathMini = 'data/' . $this->page . '/images-mini/';
}
// GET
// SET
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']);
$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 . $_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<br />le format svg n\'est pas supporté';
}
}
else
{
$this->erreur = 'Erreur: Le fichier n\'a pas pu être téléchargé correctement.<br/>
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->page . '/images/' . $_FILES['upload']['name'] . '"}';
}
}
// miniatures des photos
public function makeThumbnail($largeur)
{
global $imageLibrary;
if($imageLibrary == 'imagick')
{
$Image = new Imagick($this->path . $_FILES['upload']['name']);
$source = $Image->getImageGeometry();
if($source['width'] > $largeur)
{
// 0 signifie qu'on conserve les proportions
$Image->thumbnailImage($largeur, 0);
}
// écriture dans un fichier
$Image->writeImage($this->pathMini . $this->pathInfos['filename'] . '-mini.' . $this->pathInfos['extension']);
}
elseif($imageLibrary == 'gd')
{
// cette fonction fonctionne pour tous les formats
$source = imagecreatefromstring(file_get_contents($this->path . $_FILES['upload']['name']));
$nomMiniImage = $this->pathMini . $this->pathInfos['filename'] . '-mini.jpg';
$forme = imagesy($source) / imagesx($source);
var_dump($forme);
if(imagesx($source) > $largeur)
{
// créer un rectangle noir
$destination = imagecreatetruecolor($largeur, $largeur * $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, $largeur, $largeur * $forme, imagesx($source), imagesy($source));
// envoie l'image dans un fichier
imagejpeg($destination, $nomMiniImage);
}
else
{
imagejpeg($source, $nomMiniImage);
}
}
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->page . '&erreur=dependance_bibli_images');
exit();
}
}
}
|