254c6de50dfdbb976e4457733da1cb4813c17140
[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         if(!function_exists('imagecreatefrompng')
36             and !function_exists('imagecreatefromjpeg')) {
37             throw new moodle_exception('gdnotexist');
38         }
39         if(!file_exists($img) or !is_readable($img)) {
40             throw new moodle_exception('invalidfile');
41         }
43         $this->imagepath = $img;
44         unset($img);
45         $this->info = getimagesize($this->imagepath);
47         switch($this->info['mime']) {
48         case 'image/jpeg':
49             $this->image = imagecreatefromjpeg($this->imagepath);
50             break;
51         case 'image/png':
52             $this->image = imagecreatefrompng($this->imagepath);
53             break;
54         case 'image/gif':
55             $this->image = imagecreatefromgif($this->imagepath);
56             break;
57         default:
58             break;
59         }
60         $this->width  = imagesx($this->image);
61         $this->height = imagesy($this->image);
62     }
64     function destroy() {
65          imagedestroy($this->image);
66          imagedestroy($this->backup);
67          return true;
68     }
70     function undo() {
71         $this->image = $this->backup;
72         return $this;
73     }
75     function watermark($text='', $pos=array(), $options=array()) {
76         global $CFG;
77         $text = iconv('ISO-8859-8', 'UTF-8', $text);
78         if (empty($options['fontsize'])) {
79             if (!empty($options['ttf'])) {
80                 $options['fontsize'] = 12;
81             } else {
82                 $options['fontsize'] = 1;
83             }
84         }
86         if (empty($options['font'])) {
87             $options['font'] = $CFG->libdir . '/default.ttf';
88         }
89         if (empty($options['angle'])) {
90             $options['angle'] = 0;
91         }
92         $clr = imagecolorallocate($this->image, 255, 255, 255);
93         if (!empty($options['ttf'])) {
94             imagettftext($this->image,
95                 $options['fontsize'],        // font size
96                 $options['angle'],
97                 $pos[0],
98                 $pos[1]+$options['fontsize'],
99                 $clr,
100                 $options['font'],
101                 $text);
102         } else {
103             imagestring($this->image, $options['fontsize'], $pos[0], $pos[1], $text, $clr);
104         }
105         return $this;
106     }
108     function rotate($angle=0, $bgcolor=0) {
109         $this->image = imagerotate($this->image, $angle, $bgcolor);
110         return $this;
111     }
113     function resize($w, $h, $use_resize = true) {
114         if(empty($h) && !empty($w)) {
115             $h = $this->height * ($w/$this->width);
116         }
117         if(!empty($h) && empty($w)) {
118             $w = $this->width  * ($h/$this->height);
119         }
120         $new_img = imagecreatetruecolor($w, $h);
121         imagealphablending($new_img, false);
122         imagecopyresampled($new_img /* dst */, $this->image /* src */, 0, 0, 0, 0, $w, $h, $this->width, $this->height);
123         $this->image = $new_img;
124         return $this;
125     }
127     function saveas($imagepath) {
128         switch($this->info['mime']) {
129         case 'image/jpeg':
130             return imagejpeg($this->image, $imagepath);
131             break;
132         case 'image/png':
133             return imagepng($this->image, $imagepath);
134             break;
135         case 'image/gif':
136             return imagegif($this->image, $imagepath);
137             break;
138         default:
139             break;
140         }
141         if(!$this->destroy()) {
142             return false;
143         } else {
144             return $this;
145         }
146     }
148     function display() {
149         header('Content-type: '.$this->info['mime']);
150         switch($this->info['mime']) {
151         case 'image/png':
152             imagepng($this->image);
153             break;
154         case 'image/jpeg':
155             imagejpeg($this->image);
156             break;
157         case 'image/gif':
158             imagegif($this->image);
159             break;
160         default:
161             break;
162         }
163         $this->destroy();
164         return $this;
165     }