Merge branch 'm20_MDL-22449_wiki_help_buttons' of git://github.com/dongsheng/moodle
[moodle.git] / repository / flickr_public / image.php
1 <?php
3 // This file is part of Moodle - http://moodle.org/
4 //
5 // Moodle is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // Moodle is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
18 /**
19  * moodle_image class
20  *
21  * @package    repository
22  * @subpackage flickr_public
23  * @author     Dongsheng Cai <dongsheng@moodle.com>
24  * @license    http://www.gnu.org/copyleft/gpl.html GNU Public License
25  */
26 class moodle_image {
27     private $imagepath;
28     private $info;
29     private $width;
30     private $height;
31     private $image;
32     private $backup;
34     function __construct($img) {
35         ini_set('gd.jpeg_ignore_warning', 1);
36         if(!function_exists('imagecreatefrompng')
37             and !function_exists('imagecreatefromjpeg')) {
38             throw new moodle_exception('gdnotexist');
39         }
40         if(!file_exists($img) or !is_readable($img)) {
41             throw new moodle_exception('invalidfile');
42         }
44         $this->imagepath = $img;
45         unset($img);
46         $this->info = getimagesize($this->imagepath);
48         switch($this->info['mime']) {
49         case 'image/jpeg':
50             $this->image = imagecreatefromjpeg($this->imagepath);
51             break;
52         case 'image/png':
53             $this->image = imagecreatefrompng($this->imagepath);
54             break;
55         case 'image/gif':
56             $this->image = imagecreatefromgif($this->imagepath);
57             break;
58         default:
59             break;
60         }
61         $this->width  = imagesx($this->image);
62         $this->height = imagesy($this->image);
63     }
65     function destroy() {
66          imagedestroy($this->image);
67          imagedestroy($this->backup);
68          return true;
69     }
71     function undo() {
72         $this->image = $this->backup;
73         return $this;
74     }
76     function watermark($text='', $pos=array(), $options=array()) {
77         global $CFG;
78         $text = iconv('ISO-8859-8', 'UTF-8', $text);
79         if (empty($options['fontsize'])) {
80             if (!empty($options['ttf'])) {
81                 $options['fontsize'] = 12;
82             } else {
83                 $options['fontsize'] = 1;
84             }
85         }
87         if (empty($options['font'])) {
88             $options['font'] = $CFG->libdir . '/default.ttf';
89         }
90         if (empty($options['angle'])) {
91             $options['angle'] = 0;
92         }
93         $clr = imagecolorallocate($this->image, 255, 255, 255);
94         if (!empty($options['ttf'])) {
95             imagettftext($this->image,
96                 $options['fontsize'],        // font size
97                 $options['angle'],
98                 $pos[0],
99                 $pos[1]+$options['fontsize'],
100                 $clr,
101                 $options['font'],
102                 $text);
103         } else {
104             imagestring($this->image, $options['fontsize'], $pos[0], $pos[1], $text, $clr);
105         }
106         return $this;
107     }
109     function rotate($angle=0, $bgcolor=0) {
110         $this->image = imagerotate($this->image, $angle, $bgcolor);
111         return $this;
112     }
114     function resize($w, $h, $use_resize = true) {
115         if(empty($h) && !empty($w)) {
116             $h = $this->height * ($w/$this->width);
117         }
118         if(!empty($h) && empty($w)) {
119             $w = $this->width  * ($h/$this->height);
120         }
121         $new_img = imagecreatetruecolor($w, $h);
122         imagealphablending($new_img, false);
123         imagecopyresampled($new_img /* dst */, $this->image /* src */, 0, 0, 0, 0, $w, $h, $this->width, $this->height);
124         $this->image = $new_img;
125         return $this;
126     }
128     function saveas($imagepath) {
129         switch($this->info['mime']) {
130         case 'image/jpeg':
131             return imagejpeg($this->image, $imagepath);
132             break;
133         case 'image/png':
134             return imagepng($this->image, $imagepath);
135             break;
136         case 'image/gif':
137             return imagegif($this->image, $imagepath);
138             break;
139         default:
140             break;
141         }
142         if(!$this->destroy()) {
143             return false;
144         } else {
145             return $this;
146         }
147     }
149     function display() {
150         header('Content-type: '.$this->info['mime']);
151         switch($this->info['mime']) {
152         case 'image/png':
153             imagepng($this->image);
154             break;
155         case 'image/jpeg':
156             imagejpeg($this->image);
157             break;
158         case 'image/gif':
159             imagegif($this->image);
160             break;
161         default:
162             break;
163         }
164         $this->destroy();
165         return $this;
166     }