summaryrefslogtreecommitdiff
path: root/model/Image.php
blob: 4cceb0f742d03e3d0f93c23a46664a42301f5870 (plain)
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
<?php
// model/Image.php

class Image
{
	private $page;
	private $ajax; // vaut true avec le ckeditor
	public $path;
	public $pathMini;
	public $pathInfos;
	public $erreur;

	public function __construct($ajax)
	{
		// 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

	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))
		{
			// nouveau chemin à renvoyer en format json
			$chemin = '{"url": "data/' . $this->page . '/images/' . $_FILES['upload']['name'] . '"}';
			echo $chemin;
		}
    }

    // miniatures des photos
    public function makeThumbnail()
    {
    	global $imageLibrary;

    	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']));

	    	$nomMiniImage = $this->pathMini . $this->pathInfos['filename'] . '-mini.jpg';

			$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')
    	{
    		$Image = new Imagick($this->path . $_FILES['upload']['name']);
    		// 0 signifie qu'on conserve les proportions
    		$Image->thumbnailImage(201, 0);
    		// écriture dans un fichier
    		$Image->writeImage($this->pathMini . $this->pathInfos['filename'] . '-mini.' . $this->pathInfos['extension']);
    	}
    	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();
    	}
    }
}